GNU ld不能正确处理ORIGIN处理; 有没有解决方法?

在Solaris中,我按以下方式链接了一些内容(使用Sun Studio;它使用Solaris链接程序,而不是GNU):

CC -shared (other flags) -R'$ORIGIN/../lib/' -o /buildpath/lib/libmylib1.so
CC -shared (other flags) -R'$ORIGIN/../lib/' -lmylib1 -o /buildpath/lib/libmylib2.so
CC (various flags) -R'$ORIGIN/../lib/' -lmylib2 -o /buildpath/bin/somebinary

...并且它连接最后的二进制文件就好了。

当我尝试在Linux中使用GNU ld (再次使用Sun Studio作为编译器驱动程序)执行此操作时,共享对象链接正常,但somebinary无法链接,因为它找不到libmylib1.so。

当我通过strace运行第三行时,它试图打开一个文件,其路径中包含文字(未扩展)的字符串$ORIGIN

我遇到了一些涉及此主题的其他问题。 我见过的唯一解决方法是使用相对路径,但是这要求您从固定位置执行二进制文件 - 也就是说,它会检查相对于`pwd`而不是二进制文件的位置。

在任何人发出有关$ORIGIN不安全/不安全的常见评论之前,这不是我们所处环境中的问题,我不希望听到关于它的评论。


它看起来像我必须这样做,但我不确定这可能有什么副作用,因为我不熟悉-rpath-link标志:

CC -shared (other flags) -R'$ORIGIN/../lib/' -o /buildpath/lib/libmylib1.so
CC -shared (other flags) -R'$ORIGIN/../lib/' -lmylib1 -o /buildpath/lib/libmylib2.so
CC (various flags) -R'$ORIGIN/../lib/' -Wl,-rpath-link,/buildpath/lib/ -lmylib2 -o /buildpath/bin/somebinary

通过我所做的少量测试,我学到了以下内容:

  • $ORIGIN根本不会被GNU ld扩展,无论是-rpath还是-rpath-link标志
  • ld.so将会扩展它
  • -rpath-link是在-rpathDT_*PATHLD_*_PATH等之前搜索到的第一组路径。
  • 链接地址: http://www.djcxy.com/p/53297.html

    上一篇: GNU ld does not handle ORIGIN processing correctly; is there a workaround?

    下一篇: Mac: How to export symbols from an executable?