静态链接是为了在别处运行时不需要额外的库。
不过静态链接过后大概688,xxx,xxxB,试了给LLVM加-ffunction-sections -fdata-sections
,自己程序链接时加-Wl,--gc-sections
(应该是这样拼的,自行查证。。。),缩小到了65x,xxx,xxxB。。。
不过这个程序不是什么很复杂的程序,只有9000多行,而且主要是用的前端的ASTMatcher,现在正尝试给所有阶段加-Os -ffuction-sections -fdata-sections -Wl,--gc-sections
(clang好像不能LTO),还有什么别的方法吗?
更新
可能破案了,llvm默认是debug,可以改成minsizerel。。。
如果用了ASTMatchers,一般不是libclang吧…… clang/lib/ASTMatchers 鏈接成 libclangASTMathers.so
libclang.so沒有.a 沒法靜態鏈接(不用Binary Hacks)
編譯選項-Oz -ffunction-sections -fdata-sections -g -gsplit-dwarf
。只需要行號的話-gmlt
甚至不用-g
鏈接選項-Wl,--icf=all -Wl,--gc-sections
如果是ld.lld,需要-Wl,-O2
開啓tail string merge,ld.bfd ld.gold自動開啓
編譯鏈接都加上-flto=full
是LTO
知道了,不过调试的话不怎么关注大小,反正我扔服务器上了。
静态链接的话,我的理解是libclang.so就是把其它.a打包成了动态的。。。不知道对不对,不过题目里这么说就是指代一下libclangxxx之类的,clang怎么称呼它们的我不清楚。。。