2012-07-24 5 views
10

Al vincular mi proyecto en el modo de liberación que estoy recibiendo la siguiente advertencia:biblioteca Boost expresión regular que une en modo de lanzamiento advierte "sección duplicado tiene diferente tamaño" cuando se utiliza MinGW-W64 cadena de herramientas

myProject-libs/release/libboost_regex-mt-s-1.50.0.a(cpp_regex_traits.o): duplicate section `.data$_ZZN5boost16cpp_regex_traitsIcE21get_catalog_name_instEvE6s_name[boost::cpp_regex_traits<char>::get_catalog_name_inst()::s_name]' has different size 

Sospecho que la podría ser que la biblioteca de impulso esté compilada con diferentes opciones que las que uso para mi proyecto, pero no sé cómo encontrar la diferencia (el impulso no dio como resultado estas opciones durante la compilación).

Para compilar el impulso para Win32 en Ubuntu 12.04 He utilizado este procedimiento:

tar jxf boost_1_50_0.tar.bz2 
cd boost_1_50_0 
./bootstrap.sh 
echo "using gcc : 4.6 : i686-w64-mingw32-g++ : <rc>i686-w64-mingw32-windres <archiver>i686-w64-mingw32-ar ;" > user-config.jam 
./bjam toolset=gcc target-os=windows --address-model=32 variant=release threading=multi threadapi=win32 link=static runtime-link=static --prefix=/opt/boost_1_50_0-release-static-windows-32 --user-config=user-config.jam -j 10 --without-mpi --without-python -sNO_BZIP2=1 -sNO_ZLIB=1 --layout=tagged install 

Para compilar los archivos en mi proyecto utilizo algo como

i686-w64-mingw32-g++ -march=corei7 -mfpmath=sse -m32 -Wall -fmessage-length=0 -I"/opt/boost_1_50_0-release-static-windows-32/include" -std=c++0x -O3 -g0 -DNDEBUG -I"myProject/src/cpp" -c -o myProject/build/release/src/cpp/myproject.o myproject/src/cpp/myproject.cpp 

Las pruebas que tengo indica que las expresiones regulares funcionan bien, pero aún así me gustaría resolver la advertencia.

EDITAR

He encontrado que las opciones adicionales al compilador de impulso se pueden agregar utilizando un CXXFLAGS = argumento de bjam.

Ejemplo: CXXFLAGS bjam = '- CLPI' ....

Tal vez asegurándose de pasar los mismos argumentos que he hecho para el proyecto podría resolver el problema (en particular los argumentos relacionados con optimizaciones como se sugiere en la pregunta vinculada).

+0

¿Has logrado compilar boost tan claramente en linux con esa línea de comandos? La última vez que lo intenté me llevó varias horas. Estoy votando tu pregunta solo por eso. – dsign

+1

No era realmente yo, solo copié y pegué de una página ya olvidada, pero también me llevó mucho tiempo encontrar un código corto tan bueno entre miles de trucos y consejos dispersos. –

+3

También tengo este 'problema' en Windows 7 64 con mingw-w64 (gcc 4.7.1, boost 1.51.0), pero no con mingw (gcc 4.7.0). tal vez este es un problema de mingw-w64? – user573335

Respuesta

3

Sus compiladores se compilaron con diferentes opciones :) La compilación de la biblioteca en Linux y el programa en Windows da como resultado una situación en la que existe un segmento .data con un nombre idéntico, pero no son del mismo tamaño. Eso podría ser teóricamente interesante, en la medida en que un segmento de datos puede escribirse, pero en la práctica, no debería importar. A menos que haya evidencia para sugerir que esto causa un problema del cual no estoy al tanto, puede reprimir esa advertencia de manera segura; Sin embargo, no sé cómo lo harías desaparecer.

+2

En el pasado posiblemente utilicé versiones ligeramente diferentes de los compiladores, pero ahora estoy seguro de que el impulso se compiló con el mismo compilador que el proyecto y todavía tengo las advertencias . –

+0

He encontrado que tener algunas partes del proyecto compiladas con -Os y otras sin optimizaciones desencadenan este problema, también si se usa el mismo compilador. – gabry

Cuestiones relacionadas