我正在使用 gcc 开发一个使用外部库的 C++ 应用程序。例如libtiff
和libpng
。我得到了这些apt-get
,一切正常。
但后来我添加了另一个第三方库,作为独立的一对.a
和.so
lib
文件交付。我检测到另一个.so
存储在 中/usr/lib/x86_64-linux-gnu
,我在.so
那里复制了新的。我成功链接了我的应用程序,但执行失败并显示消息“ error while loading shared libraries: libThirdParty.so: cannot open shared object file: No such file or directory
”
我错过了什么?
应用程序有两种方法可以找到它的库:
LD_LIBRARY_PATH
。将其设置为您的库的路径,以冒号分隔。首先检查它是否不为空 (echo $LD_LIBRARY_PATH
) 并在这种情况下展开它,例如LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/foo/lib:/home/myself/lib
。这对于测试来说很好,或者如果你不是root
sudoer,你可以将它添加到你的 shell 初始化中(如.zshrc
),如果你想要它永久。但是当然解析变量和搜索文件会更慢,这就是为什么你通常更喜欢第二种方法:ldconfig
以 root 身份或使用sudo
. 这会扫描标准库路径(/lib
and/usr/lib
或/lib64
and/usr/lib64
)和来自配置文件/etc/ld.so.conf
的路径以及作为库参数给出的路径,ldconfig
并更新ld.so
整个系统的库缓存。首先,应该安装您的外部库,而不是复制到库位置。安装脚本会将它们放入
/usr/lib
或/usr/local/lib
*. 那会让事情变得更容易。当涉及到您图书馆的位置时,我会建议
/usr/local/lib
*.现在,如果您还没有这样做,
/usr/local/lib
可能需要将它 ( ) 放入,如果是这样,您需要运行. 如果已经完成,则没有必要。/etc/ld.so.conf
/sbin/ldconfig
最终,您可以检查您的图书馆是否找到了:
ldconfig -p | grep your_library.so
.* or
/usr/lib64
or/usr/local/lib64
对于 x86_64