【发布时间】:2015-12-18 10:11:11
【问题描述】:
我已经用 CMake 编译了一个共享库作为子项目,然后主应用程序链接到该库。库和应用程序位于我的主目录下的同一输出目录中。
因为我使用的是 Linux,所以我现在不明白为什么加载程序会看到我的库。
当我使用 ldd 检查库时,一切正常。但是,我的印象是我必须设置 LD_LIBRARY_PATH 以便我的应用程序可以从同一目录加载共享库。但我还没有设置它,它仍然有效。为什么?
【问题讨论】:
-
可能 CMake 设置了 makefile 来为链接器添加一个选项来告诉它共享库在哪里。搜索
ld选项--rpath。 -
是.so 使用
-L和-l链接的吗?另一种方法是使用 .so 的完整路径和名称直接链接。如果 CMAKE 使用其完整路径和名称链接 .so,则在加载时没有搜索。它只是使用相同的完整路径和名称。 -
@JSF 不,它似乎使用 -Wl,-rpath。
标签: c++ linux shared-libraries ubuntu-14.04