Linux g++;链接器在创建共享库时优化未使用的库?
我有一个对象文件,我想从中创建一个共享库,Linux g++;链接器在创建共享库时优化未使用的库?,linux,g++,clang++,Linux,G++,Clang++,我有一个对象文件,我想从中创建一个共享库,libA.so,并将其链接到另一个共享库,libB.so。源文件包含单个类,并且不依赖于libB.so 我将创建libA.so使用clang++或g++: clang++-shared-L/PATH/TO/LIBB-Wl,-soname=libA.so-o main.so main.o-lB g++-shared-L/PATH/TO/LIBB-Wl,-soname=libA.so-o main.so main.o-lB 使用objdump或readelf
libA.so
,并将其链接到另一个共享库,libB.so
。源文件包含单个类,并且不依赖于libB.so
我将创建libA.so
使用clang++
或g++
:
clang++-shared-L/PATH/TO/LIBB-Wl,-soname=libA.so-o main.so main.o-lB
g++-shared-L/PATH/TO/LIBB-Wl,-soname=libA.so-o main.so main.o-lB
objdump
或readelf
我可以看到我的库列在第一种情况下(clang
),但不列在第二种情况下(g++
)。你知道为什么吗
示例
C++
文件:
#包括
班{
公众:
无效测试(){
std::cout尝试--as needed ld选项。@n.m.不走运:g++:错误:无法识别的命令行选项--as needed'
这不是一个g++选项,这是一个链接器选项。如果你想把它传递给g++,你需要-Wl,--as needed
@n.m。我的运气不好,但仍然不走运。奇怪的是,如果我使用共享libra中的其他类ry并进行一些额外的调用,库在objdump
输出中再次列出。虽然列出了库,但在尝试访问某些类时仍然出现分段错误。clang没有出现此问题。请尝试--as needed ld选项。@n.m.运气不好:g++:错误:无法识别的命令行选项--as needed'
Ia不是g++选项,这是一个链接器选项。如果你想将它传递给g++,你需要-Wl,--as-needed
@n.m。我的运气不好,但仍然不走运。奇怪的是,如果我使用共享库中的一些其他类并进行一些额外调用,库会在objdump
输出中再次列出。它已列出,但我仍然得到一个分段fau尝试访问某些类时发生。此问题不会发生在clang中。