简而言之:这个问题基本上是关于告诉Linux为.so
dev目录中的可执行文件加载开发版本的文件并.so
为其他人加载已安装的文件。
长话短说:想象一个共享库,我们称之为libasdf.so
. 并想象以下目录:
/home/user/asdf/lib: libasdf.so
/home/user/asdf/test: ... perform_test
/opt/asdf/lib: libasdf.so
/home/user/jkl: ... use_asdf
换句话说,您有一个库的开发目录/home/user/asdf
(/opt/asdf
/home/user/jkl
我的问题是,我如何告诉 Linux/home/user/asdf/lib/libasdf.so
在执行时加载和在执行时/home/user/asdf/test/perform_test
加载?请注意,即使我在链接期间指定了目录,Linux 也会使用其他方法(例如和)来查找文件。/opt/asdf/lib/libasdf.so
/home/user/jkl/use_asdf
-L
/ect/ld.so.conf
$LD_LIBRARY_PATH
.so
我需要这样一个东西的原因是,当然开发目录中的可执行文件需要与最新版本的库链接,而其他程序则希望使用稳定版本。
放入../lib
库路径似乎不是一个安全的想法,更不用说不完全正确,因为您无法从不同的目录运行测试。
我想到的一种解决方案是在安装时perform_test
与它建立链接libasdf-dev.so
,复制libasdf-dev.so
为libasdf.so
并让其他人与之链接。这个解决方案有一个问题。想象以下附加目录:
/home/user/asdf/tool: ... use_asdf_too
安装到:
/opt/asdf/bin: use_asdf_too
在我的解决方案中,不知道use_asdf_too
应该链接什么。如果链接到libasdf.so
,如果从 dev 目录调用,它将无法正常工作,如果链接到libasdf-dev.so
,如果从安装位置调用,它将无法正常工作。
我能做些什么?其他人是如何管理的?