构建静态链接libclang的程序时,怎么使程序最小?

静态链接是为了在别处运行时不需要额外的库。

不过静态链接过后大概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。。。

生成可执行程序之后strip试试?

如果用了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怎么称呼它们的我不清楚。。。