我正在使用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失败?我不想删除可见性标志,因为他大大减少了我的可执行文件大小。