【发布时间】:2011-08-21 12:20:46
【问题描述】:
我正在清理一个腐烂的源代码树,并尝试让每个可执行文件和每个共享库仅与它们直接使用的库链接。
为了做到这一点,我 ldd -u- r 二进制输出,并从 makefile 中删除报告的库。
例如:
$ ldd -u -r ./libA.so
Unused direct dependencies:
/usr/local/lib/libB.so
/usr/local/lib/libC.so
/lib/tls/libpthread.so.0
$ sed -i'' -e 's/-lB//' -e 's/-lC//' Makefile
当然,libpthread 确实需要(并且无论如何都隐含在-pthread 中),但是ldd 报告的其余库可以安全地删除。
对我的优化有影响吗?完全安全吗?
【问题讨论】:
-
取决于
libB和libC是否被另一个库使用,即(直接)使用。你可以看到stackoverflow.com/questions/5664338/… -
@Kiril:这只适用于静态库。动态库知道它们的依赖关系。
-
@Kiril,你的意思是我在下面的答案中写的吗?如果是这样,那还不错,因为我会在编译失败时发现它,无论如何修复它是一个非常好的主意。