【问题标题】:How to specify RPATH in a makefile?如何在生成文件中指定 RPATH?
【发布时间】:2011-10-02 01:59:18
【问题描述】:

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

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

clean:
    rm -f main main.o 

但是当我使用命令 readelf -a ./main | grep rpath 查询 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

【问题讨论】:

    标签: makefile gnu-make ld rpath ldflags


    【解决方案1】:

    如果您设置变量,您可能应该使用它们。不这样做是很愚蠢的,尤其是当 make 不会神奇地为您设置这些变量时! :)

    main: main.c
        $(CC) $(CFLAGS) $(LDFLAGS) -o main main.c
    

    另一个问题是LDFLAGS,应该是

    LDFLAGS="-Wl,-rpath,../libs/"
    

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

    【讨论】:

    • 更新 makefile 后,出现以下错误 - gcc: unrecognized option '-rpath=../libs/'
    • 这是一个小问题,但如果有人想知道,只是补充一点,完整的路径在像LDFLAGS="-Wl,-rpath,/mnt/us/extensions/thing/usr/lib/"这样的rpaths中也是有效的
    • @twobob 你知道rpath的值可以是symlink吗?
    • @szydan 位于 FAT 驱动器上,遗憾的是会被检测为交叉链接,我认为会被削弱。事后这些天我倾向于使用gcc.gnu.org/ml/gcc/1999-04n/msg01105.html
    • realpath生成rdpath怎么样?这似乎是我可以使动态链接程序从多个目录工作的唯一方法(如bin/progprog 中的bin/ 和单独目录中的库,如lib。)这也是我的方式关联着色器等资源。
    猜你喜欢
    • 2013-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-25
    • 1970-01-01
    • 1970-01-01
    • 2016-02-04
    • 2016-10-06
    相关资源
    最近更新 更多