当我运行一个在运行时链接到共享库的进程时(该进程启动时链接,以后不链接dlload()
),它在哪里寻找该共享库(.so
)文件LD_LIBRARY_PATH
?
背景:
我写了一些使用特定第三方库的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
/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
?
sudo ldconfig -v
按照以下建议运行。如果仍然无法执行,请使用的输出更新您的问题ldd /path/to/your/application
。
/etc/ld.so.conf.d/*.conf
,但我不确定。