我想通过指定入口点从静态库中删除无效代码。
例如:
int foo() { return 0; }
int bar() { return 0; }
#include "lib1.h"
int entry() {
return foo();
}
libtool -static -o new.a lib1.a lib2.a
我希望new.a
不包含int bar()
,因为它在lib1.a
的入口点未使用,并且我不打算使用{ {1}}。
这可能吗?
答案 0 :(得分:0)
如果使用-ffunction-sections
(可能还有-fdata-sections
)进行编译并与-Wl,--gc-sections
链接,则未引用的函数将被删除。这与一开始就没有出现(例如,如果bar
包含对其他函数或数据的引用)有细微的不同,这可能会导致包含它们的文件被考虑以供考虑,可能会导致新的全局ctor或覆盖较弱的定义),但对于大多数用途而言足够接近。
另一方面,正确的方法是不要定义可以在同一翻译单元(源文件)中独立使用的函数。将它们拆分为单独的文件,这将自动运行而无需任何特殊选项。