使用 /usr/local/lib 中的共享库

Ste*_*and 79 ubuntu libraries

我已经从源代码构建了一些库,之后的文件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。

Flu*_*lup 78

对于当前会话,您可以

导出 LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib

或者,以使更改永久您可以添加/usr/local/lib/etc/ld.so.conf(或东西,它包括)并运行ldconfig为根。

如果您仍然遇到问题,运行ldd [executable name]将向您显示它正在尝试查找的库以及无法找到的库。

  • 来自`ldd(1)`的`man`页面“在通常情况下,ldd调用标准动态链接器(参见`ld.so(8)`),并将`LD_TRACE_LOADED_OBJECTS`环境变量设置为`1`,即导致链接器显示库依赖项。但是请注意,在某些情况下,某些版本的 `ldd` 可能会尝试通过直接执行程序来获取依赖项信息。因此,您永远不应该在 * **不受信任的可执行文件***,因为这可能会导致执行任意代码。处理 *不受信任的* 可执行文件时更安全的替代方法是:...” (5认同)
  • “... `$ objdump -p /path/to/program | grep 需要`” (5认同)

gol*_*cks 50

如果您ldconfig在构建库后已经运行,请继续阅读。如果没有,请先阅读 ldconfig

/usr/local/lib可能不在 ldconfig 使用的库路径中。你可以这样做:

ldconfig /usr/local/lib
Run Code Online (Sandbox Code Playgroud)

并且这些东西应该添加到链接器缓存中,但正确添加路径可能更好。确保你有一个/etc/ld.so.conf.d目录。如果是这样,请添加一个文件(称为“usr-local.conf”或其他名称),并在其中添加一行:

/usr/local/lib
Run Code Online (Sandbox Code Playgroud)

现在运行ldconfig。如果您没有 ld.so.conf.d 目录,您应该有一个/etc/ld.so.conf 文件,您可以将该行添加到它的末尾。

  • 我已将 custom.conf 文件添加到 `/etc/ld.so.conf.d` 然后 sudoed ldconfig 以将其考虑在内,我的可执行文件现在可以启动。 (4认同)