0

简而言之:这个问题基本上是关于告诉Linux为.sodev目录中的可执行文件加载开发版本的文件并.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.solibasdf.so并让其他人与之链接。这个解决方案有一个问题。想象以下附加目录:

/home/user/asdf/tool: ... use_asdf_too

安装到:

/opt/asdf/bin: use_asdf_too

在我的解决方案中,不知道use_asdf_too应该链接什么。如果链接到libasdf.so,如果从 dev 目录调用,它将无法正常工作,如果链接到libasdf-dev.so,如果从安装位置调用,它将无法正常工作。

我能做些什么?其他人是如何管理的?

4

1 回答 1

1

安装的共享对象通常不只是以“.so”结尾。通常他们还包括他们的soname,例如libadsf.so.42.1。用于开发的 .so 文件通常是完整版本文件名的符号链接。链接器将查找 .so 文件并将其解析为完整文件名,然后加载器将加载完整版本的库。

于 2013-01-28T13:54:13.653 回答