与CMakeLists链接:ld找不到库

时间:2017-02-10 22:10:26

标签: c++ ubuntu makefile cmake

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

target_link_libraries(${PROJECT_NAME} OpenNI2)

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

/usr/bin/ld: cannot find -lOpenNI2

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

谢谢!

2 个答案:

答案 0 :(得分:1)

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

您需要告诉CMake ,例如,在target_link_library命令中提供库的完整路径,或adding it as an imported library

答案 1 :(得分:0)

它可以通过以下方式添加:

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 指令中提供的名称。

details on how to proper setup LD_LIBRARY_PATH variable discussed here