其他分享
首页 > 其他分享> > c-LSB AppChecker:GCC链接未使用的库

c-LSB AppChecker:GCC链接未使用的库

作者:互联网

我正在使用LSB AppChecker检查共享对象(.so)的可移植性.
它报告的问题之一是,有一个外部库(libm.so.6)未被使用,但无论如何都被链接在一起.

如何防止GCC链接到此不需要的库?

编辑:
针对我的共享对象的ldd命令的输出为:

    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)

解决方法:

将-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]

标签:portability,gcc,shared-libraries,linux,c-4
来源: https://codeday.me/bug/20191210/2103113.html