难以将$ ORIGIN添加到LDFLAGS中

问题描述 投票:0回答:1

类似于this post,我需要将$ORIGIN/../lib传递给编译过程。我正在通过

./configure "LDFLAGS=-Wl,-rpath,\$\$ORIGIN/../lib"
make

但是,当我通过objdump -x src/foo | grep PATH检查可执行文件时,会得到

/home/Users/me/foo_repo/lib:/../lib

当我想要的是

/home/Users/me/foo_repo/lib:$ORIGIN/../lib

因此,似乎正在评估$ORIGIN,而不仅仅是放入RUNPATH

如何防止这种情况发生?我尝试将转义符添加到两个$中,但得到的结果相同。

makefile compilation linker configure
1个回答
0
投票
这是行不通的,因为您还需要第三层引号:因为您是通过命令行将此值传递给configure脚本的,所以需要为shell引用的值。

您运行此:

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

shell在调用configure之前除去了第一级引用,因此放入您的makefile中的LDFLAGS的值是这样的:

LDFLAGS=-Wl,-rpath,$$ORIGIN/../lib

然后,当make运行链接程序时,它将把转义的$$转换为单个$,并且make将调用一个shell并通过以下选项传递您的链接行:

-Wl,-rpath,$ORIGIN/../lib

shell将扩展$ORIGIN,因为它看起来像shell变量,将其扩展为空字符串,然后得到结果-Wl,-rpath,/../lib

为了获得正确的报价,向后工作通常很有用。当make调用您的链接行时,它需要转义$ORIGIN,以便外壳程序不对其进行扩展,因此您希望参数为:

'-Wl,-rpath,$ORIGIN/../lib'

为了得到它,您需要将LDFLAGS设置为类似以下内容:

LDFLAGS='-Wl,-rpath,$$ORIGIN/../lib'

为了得到它,您需要在调用configure时从shell中将其全部转义,包括单引号,例如:

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

(注意,我没有尝试过)
© www.soinside.com 2019 - 2024. All rights reserved.