我正在开发一个使用外部库的 C++ 应用程序,使用 gcc。例如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
”
我缺少什么?
答案1
应用程序有两种方式查找其库:
- 环境变量
LD_LIBRARY_PATH
。将其设置为包含库的路径,以冒号分隔。首先检查它是否不为空 (echo $LD_LIBRARY_PATH
),如果是则展开它,例如LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/foo/lib:/home/myself/lib
。这对于测试来说很好,或者如果您既不是sudoer,如果您想要永久使用它,root
可以将其添加到 shell 初始化中(如)。.zshrc
但当然,解析变量和搜索文件会比较慢,这就是为什么您通常更喜欢第二种方法: - 复制库后,
ldconfig
以 root 身份或使用sudo
.这会扫描标准库路径(/lib
和/usr/lib
或/lib64
和/usr/lib64
)以及配置文件中的路径/etc/ld.so.conf
和作为ldconfig
库的参数给出的路径,并更新ld.so
整个系统的库缓存。
答案2
首先,应安装外部库,而不是复制到库位置。安装脚本会将它们放入/usr/lib
或/usr/local/lib
*.这会让事情变得更容易。
当谈到您的图书馆的位置时,我建议/usr/local/lib
*。
现在,如果您还没有这样做,则/usr/local/lib
可能需要将其 ( ) 放入,如果是这样,您需要运行。如果已经完成则没有必要。/etc/ld.so.conf
/sbin/ldconfig
最后,您可以检查我是否找到了您的图书馆
ldconfig -p | grep your_library.so
:
* 或/usr/lib64
或/usr/local/lib64
对于 x86_64