我已经从源代码构建了一些库,之后的文件make install
位于/usr/local/lib
例如,就我而言,我的文件libodb-2.2.so
位于此目录中。
但是,当我启动与 链接的可执行文件时libodb
,出现错误:加载共享库时出错:libodb-2.2.so: cannont open shared object file: No such file or directory.
这是否意味着我没有正确构建可执行文件?或者我应该向系统表明该文件夹中/usr/local/lib
也可能有一些有趣的库?
我使用的是 Ubuntu 12.04,Linux 内核 3.2.0-38-generic。
答案1
对于当前会话,您可以
导出 LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib
或者要使更改永久化,您可以添加/usr/local/lib
(/etc/ld.so.conf
或其中包含的内容)并ldconfig
以 root 身份运行。
如果您仍然遇到问题,运行ldd [executable name]
将向您显示它正在尝试查找的库以及找不到的库。
答案2
ldconfig
如果您在构建库后已经运行,请继续阅读。如果不,阅读有关 ldconfig 的信息第一的。
/usr/local/lib
可能不在 ldconfig 使用的库路径中。你可以这样做:
ldconfig /usr/local/lib
这些东西应该添加到链接器缓存中,但最好正确添加路径。确保您有一个/etc/ld.so.conf.d
目录。如果是这样,请添加一个文件(将其命名为“usr-local.conf”或其他名称),然后在其中添加一行:
/usr/local/lib
现在运行ldconfig
。如果你没有 ld.so.conf.d 目录,你应该有一个/etc/ld.so.conf
文件您可以将该行添加到其末尾。