使用 Meson 时如何指定库路径?

Jin*_*inu 9 cmake meson-build

我正在尝试使用 Meson 构建一个 C++ 项目。

问题是,我有一些库,/opt/conda 但在运行meson build. 它似乎只是通过/usr/lib目录搜索。

据我了解,meson使用cmakepkg-config寻找图书馆。那么设置类似的东西CMAKE_PREFIX_PATH是一个可行的解决方案吗?如果是这样,我该怎么做?

提前致谢。

Pic*_*ent 5

我看到了两种可能的方法来解决您的问题。

  • 第一个解决方案使用LIBRARY_PATH,这与LD_LIBRARY_PATH稍后解释的不同。
  • 第二种解决方案使用修改后的介子文件将选项直接传递给链接器。可选地,它也使用rpath消除了LD_LIBRARY_PATH事后修改的需要。

    1. 第一个解决方案

构建项目时,链接器使用LIBRARY_PATH(而不是 LD_LIBRARY_PATH

LIBRARY_PATHgcc 在编译之前使用它来搜索包含需要链接到程序的静态和共享库的目录

LD_LIBRARY_PATH在成功编译和链接后,程序使用它来搜索包含共享库的目录

更多细节LD_LIBRARY_PATH 与 LIBRARY_PATH

也许你可以试试

export LIBRARY_PATH=/opt/conda/:$LIBRARY_PATH
Run Code Online (Sandbox Code Playgroud)

在运行介子来构建你的项目之前。

  1. 第二种解决方案

修改介子文件并使用rpath(可选)

先前第一个解决方案的替代方法是直接修改您的 Meson 文件以将一些选项传递给链接器

这是我过去使用过的东西,您可以轻松适应您的问题:

#
# blaspp
#
blaspp_lib = 'blaspp'
blaspp_lib_dir = '/opt/slate/lib'
blaspp_header_dir = '/opt/slate/include'

blaspp_dep = declare_dependency(
    link_args : ['-L' + blaspp_lib_dir, '-l' + blaspp_lib],
    include_directories : include_directories(blaspp_header_dir))

executable('test_blaspp',
       'test_blaspp.cpp',
       build_rpath : blaspp_lib_dir,
       install_rpath : blaspp_lib_dir,
       dependencies : [blaspp_dep])
Run Code Online (Sandbox Code Playgroud)
  • declare_dependency(...)定义传递给链接器的选项(这取代了LIBRARY_PATH在第一个解决方案中定义的需要)

  • 可执行(...)定义rpath. 这是一个可选步骤,可将额外的库路径信息直接嵌入到可执行文件中。如果您使用它,您将不必LD_LIBRARY_PATH在运行可执行文件时修改。

更多详细信息: https : //amir.rachum.com/blog/2016/09/17/shared-libraries/(查看“rpath 和运行路径”部分)并查看维基百科:https://en.wikipedia。组织/维基/Rpath