cel*_*vek 5 c++ gcc templates arm elf
我有一个广泛使用模板的源文件。在该文件中,我还具有不同模板的显式实例化…很多。该文件被编译为静态库的一部分。我在多个平台上为多个体系结构编译了该库:Win x86,Linux x86和Linux ARM。对于Linux版本,我使用不同的编译器,因此生成的文件(在ELF文件本身的上下文中讨论)是不同的:对于GCC,生成的目标文件大小为8.4MB,并具有超过40000个ELF节;对于ARM编译器(armcc),结果文件的大小为12.7MB,并具有超过90000个ELF节(!);在两种情况下,我都有调试信息。
发生的情况是,在链接时,ARM链接器试图将静态库中的巨大目标文件链接起来而死掉了。经过一番调查,看来它无法处理其中包含超过65536个ELF部分的目标文件(尽管我仍然必须从编译器供应商处获得确认,否则我将完全或完全错误地做某件事)。我发现的解决方案是将文件拆分为多个较小的文件(它的结构以及允许的内容)。
问题:还有其他替代解决方案吗?在链接阶段之前,编译器是否有可能在目标文件中(在模板的上下文中)生成额外的代码?
使用 ARM RVCT 编译器 (armcc),尝试将 --remove_unneeded_entities 添加到命令行。这可能会或可能不会产生太大影响,具体取决于您使用的编译器版本,但值得一试