我想通过指定入口点从静态库中删除死代码。
例如:
lib1.c
int foo() { return 0; }
int bar() { return 0; }
lib2.c
#include "lib1.h"
int entry() {
return foo();
}
new.a(lib1.a + lib2.a)
libtool -static -o new.a lib1.a lib2.a
我希望 new.a
不包含 int bar()
因为它在 lib1 的入口点中未使用.a
,而且我不打算直接使用 lib2.a
。
这可能吗?
最佳答案
如果使用 -ffunction-sections
(可能还有 -fdata-sections
)进行编译并使用 -Wl,--gc-sections
进行链接>,未引用的函数将被删除。这与它们一开始就不存在有微妙的不同(例如,如果 bar
包含对其他函数或数据的引用,则可能会导致包含它们的文件被拉入考虑,可能会导致新的全局因素或覆盖弱定义)但对于大多数目的来说足够接近。
另一方面,正确的方法是不要在同一个翻译单元(源文件)中定义可以独立使用的函数。将它们分成单独的文件,这会自动工作,无需特殊选项。
关于c - 是否可以从静态库中删除死代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57901361/