在创建共享库时,g ++链接器是否优化了未使用的库?

时间:2015-06-21 07:44:32

标签: linux g++ clang++

我有一个目标文件,我想从中创建一个共享库libB.so,并将其链接到另一个共享库libB.so。源文件包含单个类,并且对libA.so没有任何依赖性。

我会使用clang++g++创建clang++ -shared -L/PATH/TO/LIBB -Wl,-soname=libA.so -o main.so main.o -lB

  1. g++ -shared -L/PATH/TO/LIBB -Wl,-soname=libA.so -o main.so main.o -lB
  2. objdump
  3. 使用readelfclang我可以看到我的库列在第一种情况(g++),不在第二种情况下({ {1}})。有什么想法吗?

    示例

    C++档案:

    #include <iostream>
    
    class Tain {
    public:
      void test() {
        std::cout << "YES";
      }
    };
    
    int main( int argc, const char* argv[] )
    {
      Tain t;
      t.test();
    }
    

    readelf -a main.so | grep -i needed的结果:

    1. g++ -shared -L/PATH/TO/BOOST -lboost_log -Wl,-soname=main.so -o main.so main.cpp

      0x0000000000000001(NEEDED)共享库:[libstdc ++。so.6]

      0x0000000000000001(NEEDED)共享库:[libc.so.6]

    2. clang++-3.5 -shared -L/PATH/TO/BOOST -lboost_log -Wl,-soname=main.so -o main.so main.cpp

      0x0000000000000001(NEEDED)共享库:[libboost_log.so.1.56.0]

      0x0000000000000001(NEEDED)共享库:[libstdc ++。so.6]

      0x0000000000000001(NEEDED)共享库:[libm.so.6]

      0x0000000000000001(NEEDED)共享库:[libgcc_s.so.1]

      0x0000000000000001(NEEDED)共享库:[libc.so.6]

0 个答案:

没有答案