你能 relink/modify 相关共享库查找路径吗?
Can you relink/modify relative shared library look up paths?
我运行遇到以下情况。项目 A 具有库 A1、A2、A3...,它们遵循自己的目录结构。例如:
Libaries/
|
|--Dir1/
| |
| |--A1.so
| |--A2.so
|
|--Dir2/
| |--A3.so
| |--A4.so
在这种情况下,项目 A 编译得很好。项目 A 的库是项目 B 的依赖项,脚本(我无法控制)将它们复制到平面层次结构中的 B 目录,即 this
BLibraries/
|--A1.so
|--A2.so
|--A3.so
|--A4.so
所以相对路径不再相同。
B 通过 dlopen 从这些库中动态加载符号。在这种情况下,如果 A1 需要来自 A2 的符号,B 它们将显示为未定义,因此 B 无法加载 A1。
有没有办法我可以戳文件 Ai.so 并告诉他们“嘿,你需要的符号库现在实际上就在这里”?
Is there a way I can poke the files Ai.so and tell them "Hey that other library whose symbols you need is actually over here now"?
您可以使用 patchelf 来做到这一点,但您 不应该 。
由于 您 控制 A*.so
的构建方式,因此您应该设置它们的 RPATH
以使其“开箱即用”。添加 -rpath=/path/to/BLibraries
到 A*.so
link 命令可能就足够了。
我运行遇到以下情况。项目 A 具有库 A1、A2、A3...,它们遵循自己的目录结构。例如:
Libaries/
|
|--Dir1/
| |
| |--A1.so
| |--A2.so
|
|--Dir2/
| |--A3.so
| |--A4.so
在这种情况下,项目 A 编译得很好。项目 A 的库是项目 B 的依赖项,脚本(我无法控制)将它们复制到平面层次结构中的 B 目录,即 this
BLibraries/
|--A1.so
|--A2.so
|--A3.so
|--A4.so
所以相对路径不再相同。
B 通过 dlopen 从这些库中动态加载符号。在这种情况下,如果 A1 需要来自 A2 的符号,B 它们将显示为未定义,因此 B 无法加载 A1。
有没有办法我可以戳文件 Ai.so 并告诉他们“嘿,你需要的符号库现在实际上就在这里”?
Is there a way I can poke the files Ai.so and tell them "Hey that other library whose symbols you need is actually over here now"?
您可以使用 patchelf 来做到这一点,但您 不应该 。
由于 您 控制 A*.so
的构建方式,因此您应该设置它们的 RPATH
以使其“开箱即用”。添加 -rpath=/path/to/BLibraries
到 A*.so
link 命令可能就足够了。