我已经编译了自己的共享库“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
有什么想法为什么我的程序找不到我的 .so 而 ldconfig 却找到了它?
编辑:我在带有英特尔处理器的 Opensuse 13.1 上运行完全相同的配置,没有任何问题!
编辑2:有关我的配置的更多详细信息:
- OpenSuse 13.1 - Intel - 64 位操作系统。
- qemu 仿真内的 ARM Opensuse 13.1(在上述操作系统上);所以这不是原生的arm操作系统...
编辑 3:我确信该库的格式正确:因为将其放入/usr/lib 并运行 ldconfig 可以修复问题。真正的问题仍然是:为什么我的程序在子目录中找不到它?
最佳答案
我刚刚找到了一个似乎有帮助的解决方法:
我将我的库放在/usr/lib/中并运行 ldconfig --> 一切正常
我从/usr/lib 中删除了我的库 --> 一切正常。
也许 ldconfig 试图变得太聪明;并且没有注意到/usr/lib/test/中的任何更改,因为它之前没有跟踪此文件夹。通过更改/usr/lib/中的某些内容,我可能会迫使他进行真正的刷新?
关于linux - ARM 上的程序找不到共享库,而 ldconfig 找到它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21832416/