He tratado esto durante años en un trabajo anterior. El enlazador GNU simplemente tiene serios problemas de rendimiento al vincular grandes cantidades de bibliotecas estáticas. En un momento dado, el tiempo de enlace estaba a la par con el tiempo de compilación, lo cual nos pareció tan extraño que realmente investigamos esto y lo descubrimos.
Puede intentar combinar sus bibliotecas estáticas en un "superobjeto" antes de vincularlas. En lugar de vincular de esta manera:
$ g++ -o program program.o $STATIC_LIBS
Usted podría intentar esto:
$ ld -r -o libraries.o --whole-archive $STATIC_LIBS
$ g++ -o program program.o libraries.o
Tenga en cuenta que este método da el enlazador menos oportunidades para excluir el código objeto sin usar, por lo que los binarios pueden aumentar de tamaño un poco.
¿Está usando [generación de código de tiempo de enlace] (http://gcc.gnu.org/wiki/LinkTimeOptimization)? Producirá código más rápido, pero los tiempos de enlace subirán. –
8 segundos es rápido. Eso no parece mucho de qué preocuparse. ¿Qué tan grande es el proyecto? –
Plataforma y compilador? Con GCC y binutils, [gold] (http://sourceware.org/ml/binutils/2008-03/msg00162.html) es más rápido que (clásico) ld y [clang] (http: //clang.llvm .org /) puede (o no) ser más rápido que eso. – ephemient