【问题标题】:How to remove path from linked library in g++如何从g ++中的链接库中删除路径
【发布时间】:2017-08-04 08:01:51
【问题描述】:

我生成了一个包含以下库的库:

使用的命令:

g++ -o testmylibrary -Xlinker -R /med/build/gcc/gcc-6.2.0/linux32/gcc-6.2.0/lib -ggdb3 -m32 -fno-tree-vectorize file1.o fileMain.o mylibrary.so -lm -lstdc++ -lsupc++

libpthread.so.0 => /lib/libpthread.so.0 (0xf7bc4000)

libstdc++.so.6 => /med/build/gcc/gcc-6.2.0/linux32/gcc-6.2.0/lib/libstdc++.so.6 (0xf7a4b000)

libm.so.6 => /lib/libm.so.6 (0xf7a22000)
libgcc_s.so.1 => /med/build/gcc/gcc-6.2.0/linux32/gcc-6.2.0/lib/libgcc_s.so.1 (0xf7a07000)

libc.so.6 => /lib/libc.so.6 (0xf78ac000)  /lib/ld-linux.so.2 (0x00796000)

我想从 libstdc++libgcc_s 库中删除路径“/med/build/gcc/gcc-6.2.0/linux32/gcc-6.2.0”。

什么选项让 g++ 删除这些路径并使它们与 libpthread

【问题讨论】:

    标签: c++ gcc linker g++


    【解决方案1】:

    请注意,这是一个运行时链接器搜索路径,它没有编码到共享库的文件名中。 -R 链接器选项将该路径嵌入到正在生成的对象的RPATH 条目中。使用readelf -d testmylibrary 检查。

    运行时链接器首先在RPATH 条目中提到的目录中搜索所需的共享库,然后在标准位置中搜索。碰巧/med/build/gcc/gcc-6.2.0/linux32/gcc-6.2.0/lib 包含这些库,因此动态链接器会使用它们。

    如果您删除 -R /med/build/gcc/gcc-6.2.0/linux32/gcc-6.2.0/lib 选项,则在搜索所需的共享库时,运行时链接器将不会使用该路径。

    您也不需要显式链接到-lstdc++-lsupc++g++ 会为您做到这一点。

    【讨论】:

    • 非常感谢。这很好地解释了我的问题。 :)
    猜你喜欢
    • 1970-01-01
    • 2011-10-26
    • 1970-01-01
    • 1970-01-01
    • 2011-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多