dlopen - 无法打开共享对象文件

时间:2017-12-12 11:54:29

标签: gcc shared-libraries visibility dlopen dlsym

我正在使用gcc编译共享库并使用dlopen加载它。我还将以下内容传递给编译器:

-fvisibility=hidden

当我编译没有可见性标志的库时,一切都很完美。但是,当我使用标志编译时,我在dlopen中遇到以下错误:

libtest.so: cannot open shared object file: No such file or directory

linbrary .so文件存在!这对我来说似乎很奇怪,因为如果某些符号被隐藏,我会期望如果无法找到某些符号,dlsym就会失败。但是,加载库(aka dlopen)时,这已经失败。

我也尝试添加

__attribute__ ((visibility ("default")))

到我后来调用的函数(extern“C”),没有任何成功。有谁知道我能做些什么呢?或者,有没有办法调试这个来弄清楚为什么dlopen失败?我不想删除可见性标志,因为他大大减少了我的可执行文件大小。

1 个答案:

答案 0 :(得分:1)

我的lib依赖于另一个无法找到的lib。

您可以使用ldd查看所有依赖项的列表,包括缺失。

ldd libtest.so