我编译了自己的共享库“libgsttest.so”,我把它放在/ usr / lib / test
/usr/lib/test/libgsttest.so
我在/etc/ld.so.conf.d中添加了一个文件“test.conf”,其中包含一行:
/usr/lib/test
我运行ldconfig。要检查ldconfig是否找到了库,我运行:
ldconfig -p | grep test
libgsttest.so (libc6) => /usr/lib/test/libgsttest.so
此共享库由gstreamer插件使用(但我的猜测是,这对问题并不重要)。当我开始我的插件时,linux抗议:
Could not load plugin file: Opening module failed: libgsttest.so: cannot open shared object file: No such file or directory
当ldconfig找到它时,为什么我的程序找不到我的.so的任何想法?
编辑:我在Opensuse 13.1上使用英特尔处理器运行完全相同的配置,我没有问题!编辑2:关于我的配置的更多细节:
编辑3:我确定该库的格式正确:因为将它放在/ usr / lib中并运行ldconfig可以解决问题。真正的问题仍然是:为什么我的程序在子目录中找不到它?
答案 0 :(得分:0)
我刚刚找到一个似乎有帮助的解决方法:
我将我的库放在/ usr / lib /中并运行ldconfig - >一切正常
我从/ usr / lib中移除了我的库 - >一切都在继续。
也许ldconfig试图太聪明;并且没有注意到/ usr / lib / test /中的任何更改,因为它之前没有跟踪此文件夹。通过更改/ usr / lib /中的内容,我可能会强迫他进行真正的刷新?
答案 1 :(得分:0)
http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html
ldconfig不设置链接器名称;通常这样做 在库安装期间,链接器名称只是创建为 一个符号链接到“最新的”'soname或最新的真实姓名。一世 会建议将链接器名称作为符号链接 soname,因为在大多数情况下,如果你更新你想要的库 链接时自动使用它。我问H. J. Lu为什么ldconfig 不会自动设置链接器名称。他的解释是 基本上你可能想要使用最新版本的代码来运行代码 一个图书馆,但可能反而希望开发链接旧的 (可能不兼容)库。因此,ldconfig没有 关于你希望程序链接到什么的假设,所以安装程序 必须专门修改符号链接以更新链接器的内容 用于图书馆。