考虑这种情况(在释放模式的一切):VC++链接器删除间接依赖于静态库
a.lib includes f1() and f2().
a.lib is built using /LTCG on VS2015.
f1() is local without any external function calls.
f2() calls fc() from b.lib
b.lib includes fc() and 100s of other functions.
b.lib is built by a 3rd party, probably not VS.
main.exe is built only with main.cpp, using /LTCG on VS2015.
main.exe links to a.lib and b.lib
main.cpp only calls f1()
现在,当我建立MAIN.EXE,我希望它仅包含F1()的实现。可执行文件的大小是〜10MB。但是,如果我在a.lib中注释掉f2()的实现并重建a.lib,那么main.exe就会变成200KB。它在两种情况下都完全相同。
我担心的是可执行文件的大小,并且暴露了有关b.lib(这不是我自己的库)的任何不必要的内容。
问题:为什么链接器不够智能,不能包含f2() - > fc()的定义?而它足够聪明,不包括b.lib的其余部分(超过100MB)?
您可以尝试使用C/C++/Gy选项构建a.lib并使用链接器/ OPT选项链接您的可执行文件吗? –
/Gy已经为a.lib定义,对于可执行文件/ OPT:ICF和/ OPT:REF已经启用。心中有另一个/ OPT吗? – Alparslan