Linker GNU ld未正确处理原点处理;有解决办法吗?

Linker GNU ld未正确处理原点处理;有解决办法吗?,linker,gnu,ld,Linker,Gnu,Ld,在Solaris中,我链接了以下内容(使用Sun Studio;在引擎盖下使用Solaris链接器,而不是GNU): 。。。它将最终的二进制文件链接得很好 当我尝试在Linux中使用GNUld(再次使用Sun Studio作为编译器驱动程序)执行此操作时,共享对象链接正常,但是somebinary无法链接,因为它找不到libmylib1.so 当我在strace中运行第3行时,它试图打开一个文件,该文件的路径中包含文本(未扩展)字符串$ORIGIN 我遇到了许多其他与这个话题有关的问题。我看到的

在Solaris中,我链接了以下内容(使用Sun Studio;在引擎盖下使用Solaris链接器,而不是GNU):

。。。它将最终的二进制文件链接得很好

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

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

我遇到了许多其他与这个话题有关的问题。我看到的唯一解决方法是使用相对路径,但这需要从固定位置执行二进制文件——也就是说,它检查相对于
`pwd`
的位置,而不是二进制文件的位置


在有人插话说,
$ORIGIN
不安全/不安全之前——这在我们的环境中不是一个问题,我不想听到关于它的评论。

看起来我必须这样做,虽然我还不确定这可能有什么副作用,因为我不熟悉
-rpath链接
标志:

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
通过几次测试,我学到了以下几点:

  • 无论是在
    -rpath
    还是
    -rpath-link
    标志中,
    $ORIGIN
    都不会通过GNU
    ld
    进行扩展
    • ld。因此
      可以很好地扩展它
  • -rpath link
    是在
    -rpath
    DT_*PATH
    LD_*u PATH
    等之前搜索的第一组路径
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