我正在使用一个程序,该程序具有一些通常安装到/usr/lib
.
但是由于某种原因,我必须在本地拥有这些库。因此,要使我的程序运行(取决于前者),我需要export LD_LIBRARY_PATH= ...
或永久添加我的本地路径。这对我来说没问题,但我的软件的用户不知道这一点,对他们来说这太复杂了。所以我的问题是:有没有办法自动设置我的共享库的本地路径,这些库在运行时由我的程序调用。
我正在使用一个程序,该程序具有一些通常安装到/usr/lib
.
但是由于某种原因,我必须在本地拥有这些库。因此,要使我的程序运行(取决于前者),我需要export LD_LIBRARY_PATH= ...
或永久添加我的本地路径。这对我来说没问题,但我的软件的用户不知道这一点,对他们来说这太复杂了。所以我的问题是:有没有办法自动设置我的共享库的本地路径,这些库在运行时由我的程序调用。
有没有办法自动设置我的共享库的本地路径
也许。
如果您在 Linux 上,并且您的应用程序与共享库一起/some/prefix/bin/app
安装到 say and/some/prefix/lib/libsharedlib.so
中,那么将您的应用程序链接到:
gcc -o app -Wl,--rpath='$ORIGIN/../lib' main.o ... -lsharedlib
将完全达到您想要的结果(注意:您可以将app和 library 移入/another/dir
,只要将lib
和bin
目录一起移动,它仍然可以工作)。
注意:需要单引号$ORIGIN
。
如果您使用的平台不支持$ORIGIN
,则另一种常用技术是将应用程序包装在一个 shell 脚本中,该脚本会查看$0
、适当地设置LD_LIBRARY_PATH
,然后执行真正的应用程序(通常称为app.bin
或app.exe
)。