简而言之:这个问题基本上是告诉Linux在dev目录中加载可执行文件的开发版本,在其他目录中加载已安装的文件。
在long中:想象一个共享库,我们称它为.so。想象一下下面的目录:

/home/user/asdf/lib: libasdf.so
/home/user/asdf/test: ... perform_test
/opt/asdf/lib: libasdf.so
/home/user/jkl: ... use_asdf

换言之,您的库(.so)有一个开发目录,并且您已经安装了它以前稳定版本(libasdf.so)的副本以及使用它的其他一些程序(/home/user/asdf)。
我的问题是,如何告诉Linux,在执行/opt/asdf时加载/home/user/jkl,在执行/home/user/asdf/lib/libasdf.so时加载/home/user/asdf/test/perform_test注意,即使我在链接期间通过/opt/asdf/lib/libasdf.so指定目录,Linux也使用其他方法(例如/home/user/jkl/use_asdf-L)来查找/ect/ld.so.conf文件。
我需要这样一个东西的原因是,当然,开发目录中的可执行文件需要链接到库的最新版本,而其他程序则希望使用稳定版本。
在库路径中放置$LD_LIBRARY_PATH似乎不是一个安全的想法,更不用说不完全正确,因为您不能从其他目录运行测试。
我考虑的一个解决方案是让.so链接到../lib,在安装时,将perform_test复制为libasdf-dev.so,并让其他人链接到该链接。不过,这个解决方案有一个问题。想象一下下面的附加目录:
/home/user/asdf/tool: ... use_asdf_too

安装到:
/opt/asdf/bin: use_asdf_too

在我的解决方案中,不知道libasdf-dev.so应该与什么相关联。如果链接到libasdf.so,如果从dev目录调用它,它将无法正常工作;如果链接到use_asdf_too,如果从安装位置调用它,它将无法正常工作。
我能做什么?这是怎么被别人管理的?

最佳答案

安装的共享对象通常不仅仅以“.so”结尾。通常他们也包括他们的奏鸣曲,如libadsf.so.42.1。用于开发的.so文件通常是指向完全版本化文件名的符号链接。链接器将查找.so文件并将其解析为完整的文件名,然后加载程序将加载完全版本化的库。

关于linux - 如何管理共享库的开发和安装版本?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14563360/

10-15 23:54