当我运行一个在运行时链接到共享库的进程(在进程启动时链接,而不是后来使用dlload()链接)时,除了LD_LIBRARY_PATH之外,它会在哪里查找共享库(.so)文件?
背景:
我有一些自己编写的C++代码,使用了一个特定的第三方库。我已经在两个不同的平台上安装了该库,并编译了我的代码,这两个平台都是Ubuntu,但版本不同,gcc版本也不同。该库是从源代码编译和安装的,并且位于两个平台上的/usr/local/lib目录下。当我编译我的代码时,我使用pkg-config --libs参数链接第三方库,并且我已经验证pkg-config --libs在两个平台上返回的内容完全相同。
我的代码在两个平台上成功编译,而且LD_LIBRARY_PATH在两个平台上都没有定义(或者定义为空:" ")。然而,当我在一个平台上运行它时,它正常工作,而在另一个平台上,我得到了这个错误:
有趣的是,那些不能工作的是Ubuntu和gcc的新版本。:/
所以我正在努力弄清楚为什么能工作的那个能够找到库文件,这样我就可以让出问题的那个以同样的方式找到库文件。(即,不设置LD_LIBRARY_PATH)
更新:
这是我从cat /etc/ld.so.conf.d/*命令得到的输出
...在工作的(旧)系统上:
在破损的(较新的)系统上:
背景:
我有一些自己编写的C++代码,使用了一个特定的第三方库。我已经在两个不同的平台上安装了该库,并编译了我的代码,这两个平台都是Ubuntu,但版本不同,gcc版本也不同。该库是从源代码编译和安装的,并且位于两个平台上的/usr/local/lib目录下。当我编译我的代码时,我使用pkg-config --libs参数链接第三方库,并且我已经验证pkg-config --libs在两个平台上返回的内容完全相同。
我的代码在两个平台上成功编译,而且LD_LIBRARY_PATH在两个平台上都没有定义(或者定义为空:" ")。然而,当我在一个平台上运行它时,它正常工作,而在另一个平台上,我得到了这个错误:
error while loading shared libraries: libthrift-0.9.0.so: cannot open shared object file: No such file or directory
有趣的是,那些不能工作的是Ubuntu和gcc的新版本。:/
所以我正在努力弄清楚为什么能工作的那个能够找到库文件,这样我就可以让出问题的那个以同样的方式找到库文件。(即,不设置LD_LIBRARY_PATH)
更新:
这是我从cat /etc/ld.so.conf.d/*命令得到的输出
...在工作的(旧)系统上:
/usr/lib/mesa
/usr/lib32/mesa
/usr/lib/alsa-lib
# libc default configuration
/usr/local/lib
# Multiarch support
/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu
在破损的(较新的)系统上:
# libc default configuration
/usr/local/lib
# Multiarch support
/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu/mesa
/etc/ld.so.conf.d/*.conf
中定义,但我不确定。 - Salem/usr/local/lib/libthrift-0.9.0.so
,但仍然出现错误error while loading shared libraries: libthrift-0.9.0.so: cannot open shared object file: No such file or directory
...有没有任何原因它不会从/etc/ld.so.conf.d/*.conf
中获取目录? - Dave Lillethunsudo ldconfig -v
。如果仍然无法解决问题,请更新您的问题,并提供ldd /path/to/your/application
的输出。 - Salem