首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用CMakeLists链接: ld找不到库

问使用CMakeLists链接: ld找不到库
EN

Stack Overflow用户
提问于 2017-02-11 06:10:26
回答 2查看 14.8K关注 0票数 7

我有一个CMakeLists.txt文件,包含以下内容:

代码语言:javascript
复制
target_link_libraries(${PROJECT_NAME} OpenNI2)

当我运行cmake时,我没有收到错误。但是当我运行make时,我收到以下错误:

代码语言:javascript
复制
/usr/bin/ld: cannot find -lOpenNI2

但是,我的构建目录中有一个名为libOpenNI2.so的文件。那么为什么ld找不到这个呢?我认为构建目录位于target_link_libraries的搜索路径上

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-11 06:16:15

这是因为在链接时,链接器不会查看当前目录,而只会查看一组预定义的目录。

您需要告诉CMake库在哪里,例如,通过在target_link_library命令或adding it as an imported library中给出库的完整路径。

票数 4
EN

Stack Overflow用户

发布于 2020-10-18 02:32:29

如果添加如下所示,则可以工作:

代码语言:javascript
复制
target_link_libraries(${PROJECT_NAME} /path_to_library_build/libOpenNI2.a)

详细信息:

ld正在非常短的文件夹列表中查找库,这些文件夹在

代码语言:javascript
复制
/etc/ld.so.conf

它通常看起来如下所示:

代码语言:javascript
复制
include /etc/ld.so.conf.d/*.conf

这些*.conf文件的实际路径列表通常如下所示:

代码语言:javascript
复制
# Legacy biarch compatibility support
/lib32
/usr/lib32
# Multiarch support
/usr/local/lib/x86_64-linux-gnu
/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu

如果您的项目链接库不在此列表的文件夹中,那么ld将找不到它,除非一个特殊的链接变量设置了指向您的库的路径的LD_LIBRARY_PATH,或者cmake target_link_libraries指令中提供了一个完整的路径/库名称。

details on how to proper setup LD_LIBRARY_PATH variable discussed here

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42169473

复制
相关文章

相似问题

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