与CMakeLists链接:ld找不到库
Linking with CMakeLists: ld cannot find library
我有一个CMakeLists.txt
文件,其中包含以下内容:
target_link_libraries(${PROJECT_NAME} OpenNI2)
当我运行cmake
时,我没有收到任何错误。但是当我运行make
时,我收到以下错误:
/usr/bin/ld: cannot find -lOpenNI2
但是,我的构建目录中有一个名为 libOpenNI2.so
的文件。那么为什么ld
找不到这个呢?我以为构建目录在搜索路径上target_link_libraries
?
谢谢!
这是因为在链接时,链接器不会在当前目录中查找,而只会在一组预定义的目录中查找。
您需要告诉 CMake 库的位置,例如,通过在 target_link_library
命令中提供库的完整路径,或将其添加为导入的库。
如果添加以下内容,它可以工作:
target_link_libraries(${PROJECT_NAME} /path_to_library_build/libOpenNI2.a)
详:
LD 正在查找在 中定义的非常短的文件夹列表中的库
/etc/ld.so.conf
它通常如下所示:
include /etc/ld.so.conf.d/*.conf
这些 *.conf 文件中的实际路径列表通常如下所示:
# 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 指令中提供的完整路径/库名称。
有关如何正确设置此处讨论LD_LIBRARY_PATH变量的详细信息
相关文章:
- LD:尝试编译项目时找不到架构x86_64符号
- LD 找不到生成的函数
- OS X: ld: 找不到 -lstdc++ 的库
- 找不到 -llibmysqld Collect2.exe:错误:ld 返回 1 退出状态
- 在OSx:ld上使用CMake构建C++项目:找不到体系结构x86_64的符号
- /usr/bin/ld:找不到本地 libmpifort.so
- C++ XCODE ld:找不到体系结构x86_64 clang 的符号:错误:链接器命令失败,退出代码为 1(使用 -
- 用ar编译的存档,手动编译,ld找不到
- NDK R20 LD:LD:错误:找不到-lpthread
- g++ 编译错误消息:/usr/bin/ld:找不到 -LSSL
- /usr/bin/ld:在CentOS 7中找不到-lclapack
- 为什么“ld:找不到 -lstdc++ 的库”,当我使用 pybind11 为 c++ 库打包我的 python 绑定时
- /usr/bin/ld:在 Redhat 上找不到 /usr/lib64/libasan.so.0.0.0
- ld:找不到文件:/usr/lib/crt1.o
- 安装 gRPC : ld: 警告: 找不到选项 '-L/<path>/grpc/libs/opt/c-ares' 的目录
- /usr/bin/ld找不到标头:未识别的文件格式
- MacOS LD:找不到符号(x86_64)
- ld.so.1:protoc:fatal:libstdc++.so.6:在 Solaris 11 中找不到版本"GLIBCXX_3.4.20"
- 找不到 ld 符号
- 在mac上的x86_64架构中找不到Ld:符号