c++ - 如何从g++中的链接库中删除路径

标签 c++ gcc linker g++

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

使用的命令:

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++ 中删除路径“/med/build/gcc/gcc-6.2.0/linux32/gcc-6.2.0” libgcc_s 库。

给 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++ 会为您完成。

关于c++ - 如何从g++中的链接库中删除路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45501334/

相关文章:

c - 使用参数调用 GDB

c - vfork() 与 gcc -O2 似乎有错误的结果。

android - 使用 Android NDK r5b 链接静态库时遇到问题

ios - 尝试使用ASIHTTP时出现mach-o链接器错误

c++ - 获取 H5::DataSet 的 hid_t 和 path-in-file 以使用 H5OCopy

c++ - 使用 Windows API 启动外部程序

c++ - end() 可以是 STL 容器的 coSTLy 操作

ruby - 在 64 位 Windows 8.1 上构建 native gem 'curb' 失败 : 'checking for curl-config... no'

c++ - 在 C++ 代码中使用 Facebook Connect(在 Objective C 中)

c++ - 为 LD_PRELOAD 设置我的库会使某些进程产生加载程序错误