标签:portability gcc shared-libraries linux c-4
我正在使用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
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。