我正在开发一个拥有数百种可执行文件的系统。每个可执行文件都静态链接到各种.a库中。共享库现在不是一个选项。完全重建非常缓慢。瓶颈似乎是连接的,因为每个可执行文件都必须重新链接,并且有数百个。
是否可以在解析内部函数调用的所有库中创建“主”库,然后在链接二进制文件时使用此主库?由于内部库调用已经解决,因此可以节省时间。 (图书馆之间有很多电话)。
我们不使用clang,我不相信增量链接是一种选择。
答案 0 :(得分:2)
是否可以创建一个" master"文库
当然:ld -r -o master.o --whole-archive libfoo.a libbar.a ...
应该这样做。
每个二进制文件很可能会变大(explanation)。
此外,如果您使用的是ELF
,则使用(新)Gold linker可能会显着提高链接速度。
最后,如果您正在构建具有大量RAM的强大计算机(正如您所希望的那样),那么运行make -j12
甚至更高版本可以通过并行执行多个链接来大大加快速度。这需要正确的Makefile
结构和正确的依赖关系(无论如何