2011-04-14 8 views
5

Estoy construyendo algunos códigos heredados de proyectos que usan bibliotecas estáticas. Ahora, recibo muchos errores como este:¿Forzar ignorar símbolos duplicados?

ld: warning: option -m is obsolete and being ignored 
ld: duplicate symbol <function name> 

Hay una manera de forzar la construcción. Por lo que puedo ver, las funciones "duplicadas" son idénticas, es solo el proceso de construcción lo que se ha vuelto loco. El proyecto es realmente grande (y un desastre de código c y C++ heredado) y realmente quiero evitar pasar horas investigando el proceso de compilación. Hay una solución rápida"? Realmente solo necesito ejecutar este programa una vez, por lo que puedo vivir con (algunos) problemas de estabilidad.

Respuesta

2

Una búsqueda en man ld (para "duplicar"), en mi sistema, trajo esto:

--traditional-format 
     For some targets, the output of ld is different in some ways from 
     the output of some existing linker. This switch requests ld to use 
     the traditional format instead. 

     For example, on SunOS, ld combines duplicate entries in the symbol 
     string table. This can reduce the size of an output file with full 
     debugging information by over 30 percent. Unfortunately, the SunOS 
     "dbx" program can not read the resulting program ("gdb" has no 
     trouble). The --traditional-format switch tells ld to not combine 
     duplicate entries. 

intentarlo. Quizás solucione tu problema.

+0

¿Para qué plataforma es esa? Esa opción no está disponible en Mac OS X. Sin embargo, lo probé sin éxito en una máquina Ubuntu. Desde la página man, suena más como si tuviera que ver con símbolos de depuración. – Krumelur

+0

Esta es la salida de 'man ld' en mi máquina Debian (ld v 2.21.0.20110327). No lo probé. Lo siento, no funciona para ti. – pmg

Cuestiones relacionadas