首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >介子:如何使find_library()在不寻常的路径下工作?

介子:如何使find_library()在不寻常的路径下工作?
EN

Stack Overflow用户
提问于 2020-01-16 12:42:26
回答 3查看 6.2K关注 0票数 9

对于我的介子项目,我有一个“不寻常”的依赖关系:

代码语言:javascript
运行
复制
/opt/MyDependence/lib/libmyLib.so
/opt/MyDependence/include/myLib.hpp

我的介子文件是:

代码语言:javascript
运行
复制
project('Test', ['cpp'])

cpp = meson.get_compiler('cpp')
myLib_dep = cpp.find_library('myLib', required: true)

显然美森找不到图书馆

代码语言:javascript
运行
复制
Meson.build:5:0: ERROR: C++ library 'myLib' not found

问题是,我不知道添加额外搜索路径的“规范”方法,以便Meson可以找到我的lib。有什么想法吗?

更新:请注意,即使我使用:

代码语言:javascript
运行
复制
meson --libdir=/opt/MyDepedence/lib build

我收到以下错误消息:

代码语言:javascript
运行
复制
meson.build:1:0: ERROR: The value of the 'libdir' option is '/opt/MyDepedence/lib' which must be a subdir of the prefix '/usr/local'.
Note that if you pass a relative path, it is assumed to be a subdir of prefix.
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-06-01 12:58:54

find_library现在有了一个可选的参数dirs (自0.53.0以来),它指示了查找程序名称的绝对路径的额外列表。

代码语言:javascript
运行
复制
cpp = meson.get_compiler('cpp')
myLib_dep = cpp.find_library('myLib', dirs: '/opt/MyDepedence/lib', required: true)
票数 10
EN

Stack Overflow用户

发布于 2020-01-16 15:39:33

我终于找到了一个解决方案,一个必须使用LIBRARY_PATH

代码语言:javascript
运行
复制
export LIBRARY_PATH=/opt/MyDepedence/lib
meson build

注意:注意这不是LD_LIBRARY_PATH,差异见那里

还可以阅读这个介子/问题/217。对于Windows,LIBRARY_PATH的等价物似乎是LIBPATH (但我无法检查,因为我只在Linux下运行)。

另一种选择是“手动”定义新的依赖关系。在你的美森项目中:

代码语言:javascript
运行
复制
project('Test, ['cpp'])

myLib_dep = declare_dependency(link_args : ['-L/opt/MyDependence/lib', '-lmyLib'],
                               include_directories : ['/opt/MyDependence/include'])


exe1 = executable('main', ['main.cpp'], dependencies : [myLib_dep])

可以做的一个改进是将这个“手动”设置存储到options.txt中。

注:我终于回答了我的问题,但我仍然对更好的解决办法持开放态度。

票数 4
EN

Stack Overflow用户

发布于 2020-01-17 15:27:53

解决这一问题的标准方法是使用pkg-config。简而言之,库安装过程应该包括生成特殊"mylib.pc“文件的阶段(从头开始,或者通常是从模板"mylib.pc.in”--在互联网上搜索,有很多例子)。然后,这些包含包含/库dirs、依赖项等信息的小键值文件被安装到某个已知位置,通常是/usr/lib/pkgconfig/。介子自然会在引擎盖下运行pkg-config,当你有这样的东西时,就会找到你的库。

代码语言:javascript
运行
复制
mylib_dep = dependency('mylib', required: true)

在你的meson.build里。

更新

对于libdir介子选项错误,也可以尝试添加选项前缀:

代码语言:javascript
运行
复制
meson --prefix=/opt/MyDepedence --libdir=lib build

还请注意,使用此命令行,实际上您实际上调用了隐式setup命令(没有命令 build ,因为您将使用忍者构建),而build是一个使用选项创建的构建目录。检查。这就是为什么书写更明显的原因:

代码语言:javascript
运行
复制
meson setup build_dir --prefix=/opt/MyDepedence --libdir=lib
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59769986

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档