我生成了一个包含以下库的库:
使用的命令:
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
相同的选项答案 0 :(得分: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++
会为您做到这一点。