类似于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
如何防止这种情况发生?我尝试将转义符添加到两个$
中,但得到的结果相同。
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'"
(注意,我没有尝试过)