Meson이 Boost 라이브러리를 찾을 수 없습니다

Meson이 Boost 라이브러리를 찾을 수 없습니다

Meson을 사용하여 새로운 C++ 프로젝트를 만들고 싶습니다. 가장 먼저 필요한 것은 Boost 라이브러리에 대한 의존성입니다. 그러나 Boost 라이브러리가 내 Arch 시스템(헤더 및 라이브러리)에 설치되어 있음에도 불구하고 Meson은 해당 라이브러리를 찾을 수 없다고 불평합니다.

중간자 빌드 파일은 다음과 같습니다.

project('myproj', 'cpp')
boost_dep = dependency('boost')
executable('myproj', 'main.cpp', dependencies : boost_dep)

소스 main.cpp파일:

int main()
{
    return 0;
}

내 시스템에 설치된 일부 Boost 파일의 일부 목록:

$ ls /usr/lib/libboost*|head -n5; ls /usr/include/boost/*|head -n5
/usr/lib/libboost_atomic.a
/usr/lib/libboost_atomic.so
/usr/lib/libboost_atomic.so.1.65.1
/usr/lib/libboost_chrono.a
/usr/lib/libboost_chrono.so
/usr/include/boost/aligned_storage.hpp
/usr/include/boost/align.hpp
/usr/include/boost/any.hpp
/usr/include/boost/array.hpp
/usr/include/boost/asio.hpp

ninja내 프로젝트 내 명령 출력:

[0/1] Regenerating build files.
The Meson build system
Version: 0.43.0
Source dir: /home/io/prog/myproj/src
Build dir: /home/io/prog/myproj/builddir
Build type: native build
Project name: myproj
Native C++ compiler: c++ (gcc 7.2.0)
Build machine cpu family: x86_64
Build machine cpu: x86_64
Dependency Boost () found: NO

Meson encountered an error in file meson.build, line 2, column 0:
Dependency "boost" not found

[...]

내가 무엇을 놓치고 있나요?

답변1

다음 질문으로 내 문제가 해결되었습니다.

Fedora에서 Boost가 감지되지 않음 · 문제 #2547

meson 빌드 파일을 다음으로 대체했습니다.

project('myproj', 'cpp')
cxx = meson.get_compiler('cpp')
boost_dep = [
    cxx.find_library('boost_system'),
    cxx.find_library('boost_filesystem'),
]
executable('myproj', 'main.cpp', dependencies : boost_dep)

답변2

문제 해결됨Gnu 컴파일러 및 미국 이외의 로케일을 사용하여 포함 디렉터리 감지 문제를 수정했습니다.meson에서 종속성을 찾고 사용하려면 dependency().

전반적인 개선 사항을 찾으려면 다음을 살펴봐야 합니다 meson.build.

project('myproj', 'cpp')
deps = [
    dependency('boost')
]
executable('myproj', 'main.cpp', dependencies: deps)

또는 부스트의 특정 부분을 원하는 경우:

project('myproj', 'cpp')
deps = [
    dependency('boost', modules: ['system', 'filesystem'])
]
executable('myproj', 'main.cpp', dependencies: deps)

cxx = meson.get_compiler('cpp')및 의 조합을 사용하면 cxx.find_library('boost_system')컴파일러 및/또는 링커 플래그를 얻을 수 없습니다. find_library()테스트 전용 원시 컴파일러 검사입니다 /usr/lib. 사용자는 헤더가 사용 가능한지 확인 has_header()하고 )`를 사용하여 포함 디렉터리를 수동으로 정의해야 합니다 declare_dependency(include_directories: '/usr/local/include/xxx.

dependency()find_library()는 콘텐츠를 찾는 더 좋은 방법이며 pkg-config프로젝트가 또는 를 지원하지 않는 경우에만 사용해야 합니다 cmake.

관련 정보