代码之家  ›  专栏  ›  技术社区  ›  GetFree

LSB AppChecker:针对未使用库的GCC链接

  •  3
  • GetFree  · 技术社区  · 17 年前



        linux-gate.so.1 =>  (0x009ff000)
        libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x003dc000)
        libm.so.6 => /lib/libm.so.6 (0x00110000)
        libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00137000)
        libc.so.6 => /lib/libc.so.6 (0x0021d000)
        /lib/ld-linux.so.2 (0x0097f000)
    
    2 回复  |  直到 17 年前
        1
  •  4
  •   bdonlan    17 年前

    根据需要将-Wl参数作为链接器命令行的一部分传递。这将自动删除您实际上没有使用符号的任何直接库依赖关系。

    $ g++ -o test test.cpp -lm; readelf -d test|grep '(NEEDED)'
     0x0000000000000001 (NEEDED)             Shared library: [libstdc++.so.6]
     0x0000000000000001 (NEEDED)             Shared library: [libm.so.6]
     0x0000000000000001 (NEEDED)             Shared library: [libgcc_s.so.1]
     0x0000000000000001 (NEEDED)             Shared library: [libc.so.6]
    $ g++ -o test test.cpp -lm -Wl,-as-needed; readelf -d test|grep '(NEEDED)'                                                                    
     0x0000000000000001 (NEEDED)             Shared library: [libstdc++.so.6]
     0x0000000000000001 (NEEDED)             Shared library: [libc.so.6]
    
        2
  •  -1
  •   Bklyn    17 年前

    除非您在自己的链接命令中指定-lm,否则您使用的另一个库可能依赖于数学库。从这个问题被标记为c++的事实来看,你可能会把它当作与libstdc++链接的副作用,你无能为力。

    % ldd /usr/lib/libstdc++.so.6                                                                                      
            linux-gate.so.1 =>  (0x4001e000)
            libm.so.6 => /lib/tls/i686/cmov/libm.so.6 (0x40127000)
            libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0x4014d000)
            /lib/ld-linux.so.2 (0x40000000)
            libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x402b1000)