如何在g++中从链接库中删除路径

How to remove path from linked library in g++

本文关键字:删除 路径 链接 g++      更新时间:2023-10-16

我生成了一个库,其中包含以下库:

使用的命令:

g++-o测试库-Xlinker-R/med/build/gcc/gcc-6.2.0/lib-ggdb3-m32-fno树矢量化文件1.o fileMain.o mylibrary.so-lm-lsdc++-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相同

请注意,这是一个运行时链接器搜索路径,它没有编码到共享库的文件名中。-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++可以为您做到这一点。