如何在makefile中指定RPATH?

use*_*208 15 makefile rpath gnu-make ld ldflags

我正在尝试在二进制文件中指定rpath.我的makefile看起来像这样 -

CC=gcc 
CFLAGS=-Wall
LDFLAGS= -rpath='../libs/'
main: main.c  
    gcc -o main main.c

clean:
    rm -f main main.o 
Run Code Online (Sandbox Code Playgroud)

但是当我使用命令查询rpath时,我readelf -a ./main | grep rpath没有得到任何东西我已经尝试指定rpath,LDFLAGS= "-rpath=../libs/"但即使这似乎也不起作用.

有人可以发一个例子来说明我应该如何在makefile中指定rpath?

GCC和ld版本是 -

gcc (Ubuntu/Linaro 4.5.2-8ubuntu4) 4.5.2
GNU ld (GNU Binutils for Ubuntu) 2.21.0.20110327
Run Code Online (Sandbox Code Playgroud)

小智 42

如果设置变量,则应该使用它们.这是愚蠢的,尤其是当make不会为你神奇地设置这些变量时!:)

main: main.c
    $(CC) $(CFLAGS) $(LDFLAGS) -o main main.c
Run Code Online (Sandbox Code Playgroud)

另一个问题是LDFLAGS,它应该是

LDFLAGS="-Wl,-rpath,../libs/"
Run Code Online (Sandbox Code Playgroud)

通常用于将选项传递给链接器的gcc开关-Wl,是必需的,因为gcc本身可能无法理解裸-rpath链接器选项.虽然gcc的各种版本的一些版本接受-rpath,但我从未在gcc手册页或信息页面中看到它.为了更好的便携性,-Wl,-rpath应该是首选.

  • 这是一个小问题,但是,如果有人想知道,只是添加完整的路径在rpath中也是有效的,如`LDFLAGS =" - Wl,-rpath,/ mnt/us/extensions/thing/usr/lib /" (4认同)