2011-03-17 19 views
5

Estoy haciendo una compilación en una máquina SLES10 de 32 bits. El uso de GCC 3.4.2Por favor, explique este error de enlace: referenciado en la sección .rodata

A continuación se muestra un error de

`.L8245' referenced in section `.rodata' of CMakeFiles/myproj.dir/c++/util/MyObj.o: defined in discarded section 
`.gnu.linkonce.t._ZN5boost9re_detail9reg_grep2INS0_21grep_search_predicateIPKcSaIcEEES4_cNS_12regex_traitsIcEES5_S5_EEjT_T0_SA_RKNS_14reg_expressionIT1_T2_T3_EEjT4_' of CMakeFiles/myproj.dir/c++/util/MyObj.o 

Respuesta

5

Esto se debe normalmente a 2 .cpp diferente del que se compilan con diferentes modificadores del compilador - sino también el uso de las mismas plantillas. Las instancias de plantilla generadas pueden diferir en lo que definen/referencian, y si la instanciación que se selecciona no define/hace referencia a los mismos símbolos exactos que los descartados, puede obtener este error.

Valide que todos sus .cpp estén compilados con los mismos switches y definiciones del mismo compilador. Si esto no es posible, vuelva a ordenar los archivos .obj en la línea de comando del enlazador, en particular intente mover los archivos .obj mencionados en el mensaje de error al final o al principio de la lista de archivos .obj.

EDIT:

Además, si va a asociar contra prebuilt C++ bibliotecas, ver si se puede duplicar los interruptores del compilador utilizado para la construcción de estas bibliotecas.

+0

+1 Si actualiza su sistema operativo (Ubuntu en mi caso), se asegura de que esté limpio antes de reconstruir con un nuevo gcc/ld. Es posible que también necesite reconstruir las bibliotecas de terceros que haya creado previamente. – kfmfe04

3

Esto puede deberse al uso de una versión más nueva de binutils. binutils versión 2.15 trató esto como un error no fatal, pero las versiones posteriores de binutils cambiaron y el enlace comenzó a fallar. Consulte https://bugzilla.redhat.com/show_bug.cgi?id=191618 para obtener un informe similar.

En mi caso, pude hacer que las cosas se vinculen una vez más mediante el uso explícito de binutils 2.16.1, en lugar de binutils 2.17.

Cuestiones relacionadas