我们如何让自己的 Linux 二进制文件识别并使用它的库/依赖项。在本地库中,即在 /usr/local/lib 中,因为我们将其本身安装在 /usr/local/bin 中?
答案1
库搜索路径可以在系统级别通过数据库中的条目进行控制/etc/ld.so.cache
,也可以在应用程序级别通过设置环境变量进行控制LD_LIBRARY_PATH
全系统
将包含所需库的目录添加到/etc/ld.conf.d
.在某些系统上,您可能需要将它们直接添加到/etc/ld.conf
.
运行ldconfig
以更新库数据库/etc/ld.so.cache
应用
设置或扩展LD_LIBRARY_PATH
以包含包含应用程序上下文所需库的目录(或多个目录):
LD_LIBRARY_PATH="/usr/local/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}" /usr/local/bin/your_app arg1 arg2…
如果您可以保证它LD_LIBRARY_PATH
是空的,或者不包含与您的应用程序相关的任何内容,您可以简化此调用:
LD_LIBRARY_PATH=/usr/local/lib /usr/local/bin/your_app arg1 arg2…
在任何一种情况下,如果您已经拥有,/usr/local/bin
则$PATH
可以通过不使用应用程序的显式路径来简化。例如,
LD_LIBRARY_PATH=/usr/local/lib your_app arg1 arg2…
答案2
除了 @roaima 的答案之外,您还可以编译应用程序以显式查找本地库。添加
-Wl,-rpath /usr/local/lib
到您的编译命令(假设您正在使用gcc
)。