我有以下来源(尽可能简化):
foo.c - >主要的可执行文件$ {MAIN_FOLDER} / foo,dlopens bar.so来自运行时提供的路径。
bar.c - >共享库/bar.so,dlopends baz.so来自相对于foo的路径
baz.c - > $ {MAIN_FOLDER} /lib/baz.so,一些实现。
我需要实现的是make bar.so从foo加载时看到baz.so。我正在寻找一些我可以在foo中发出的C代码,然后调用dlopen或链接器标志来提供bar.so链接步骤。
我尝试为bar.so设置rpath,但它没有工作,因为$ ORIGIN是bar.so的位置,而不是foo。在foo中设置RPATH(工作正常,带有正确ORIGIN的RPATH传递给bar.so的加载过程)很遗憾不是一个选项(由于我赢得的正式限制无法做到这一点),我可以改变但foo.c的代码。此外,使用相对于$ CWD的路径并不能解决问题(不知道程序将从哪个位置调用)。
在加载bar.so之前尝试在foo中setenv LD_LIBRARY_PATH失败了。
这次我对移植性不感兴趣,我现在只需要Linux解决方案。