与CMakeLists链接:ld找不到库

Linking with CMakeLists: ld cannot find library

本文关键字:找不到 ld CMakeLists 链接      更新时间:2023-10-16

我有一个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变量的详细信息