【问题标题】:How do I set DT_RUNPATH with $ORIGIN from a Makefile如何使用 Makefile 中的 $ORIGIN 设置 DT_RUNPATH
【发布时间】:2019-03-23 00:38:30
【问题描述】:

例如下面将设置RUNPATH

matthewh@ORAC:~/dev/test$ g++ test.cpp -ldl -Wl,-rpath,\$ORIGIN
matthewh@ORAC:~/dev/test$ objdump -x a.out | grep RUN
  RUNPATH              $ORIGIN

但是,作为一个更复杂的示例,我尝试为使用 configure 生成的 makefile 编译的库设置此设置。

我跑

export LDFLAGS=-Wl,-rpath,\$ORIGIN
./configure
make
objdump -x library.so | grep RUN
  RUNPATH              RIGIN

显然 Make 正在扩展 $O 而不是在输出中放置文字 $O。

我该如何克服这个问题?我试过转义它,但它会在运行路径中显示奇怪的输出。

好的,具体来说,我正在尝试从 OpenEXR 编译 ilmbase-2.2.1 并设置 RUNPATH。它比单个 Makefile 更复杂,因为它使用递归 Make!

顶层 Makefile 最终设置了变量 LDFLAGS= 我已经尝试按照其他地方的建议手动将其编辑为 $$ORIGIN 但仍然是 -Wl,-rpath,RIGIN

现在我有点卡住了。在设置路径后用某种丑陋的 ELF 编辑器重写它来编辑它。

【问题讨论】:

标签: linux makefile gnu-make ld


【解决方案1】:

哇哦。这似乎有效。

./configure LDFLAGS='-Wl,-rpath,\$$ORIGIN'

\$$ 与 $$ 的魔力

gnu make 中的反斜杠是什么意思?

【讨论】:

  • 它没有任何意义,但它会阻止外壳扩展 $,即使某些东西丢弃了周围的单引号。
猜你喜欢
  • 2021-07-11
  • 2016-02-28
  • 1970-01-01
  • 2020-02-14
  • 1970-01-01
  • 1970-01-01
  • 2019-02-15
  • 1970-01-01
  • 2012-03-05
相关资源
最近更新 更多