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中。