descargar - Obtuve errores de "sección duplicada" al compilar boost_regex con optimización de tamaño(-Os)
download boost library (3)
Creo que este es un error del compilador. La solución en mi caso fue agregar -fno-tree-vectorize
.
boost: http://sourceforge.net/projects/boost/files/boost/1.52.0/boost_1_52_0.7z
(ambos en D: unidad)
boost_regex compilado con:
b2 --prefix=D:/boost toolset=gcc --with-regex --layout=tagged release
código:
#include <boost/regex.hpp>
int main() {
boost::regex reg("[a-z]+");
}
compilado con parámetros:
g++ -I "d:/boost" -Os -o test.exe test.cpp -static -L d:/boost/stage/lib -lboost_regex-mt
error:
d:/boost/stage/lib/libboost_regex-mt.a(regex.o): duplicate section `.rdata$_ZTVN5boost16exception_detail19error_info_injectorISt13runtime_errorEE[__ZTVN5boost16exception_detail19error_info_injectorISt13runtime_errorEE]'' has different size
d:/boost/stage/lib/libboost_regex-mt.a(regex.o): duplicate section `.rdata$_ZTVN5boost16exception_detail10clone_implINS0_19error_info_injectorISt13runtime_errorEEEE[__ZTVN5boost16exception_detail10clone_implINS0_19error_info_injectorISt13runtime_errorEEEE]'' has different size
d:/boost/stage/lib/libboost_regex-mt.a(regex.o): duplicate section `.rdata$_ZTSN5boost16exception_detail10clone_implINS0_19error_info_injectorISt13runtime_errorEEEE[__ZTSN5boost16exception_detail10clone_implINS0_19error_info_injectorISt13runtime_errorEEEE]'' has different size
d:/boost/stage/lib/libboost_regex-mt.a(regex.o): duplicate section `.rdata$_ZTSN5boost16exception_detail10clone_baseE[__ZTSN5boost16exception_detail10clone_baseE]'' has different size
d:/boost/stage/lib/libboost_regex-mt.a(regex.o): duplicate section `.rdata$_ZTSN5boost16exception_detail19error_info_injectorISt13runtime_errorEE[__ZTSN5boost16exception_detail19error_info_injectorISt13runtime_errorEE]'' has different size
Compila bien, pero todavía no he probado si funcionará en código más complejo. Al eliminar el -Os
se borra el error, pero el tamaño de la aplicación es 2 -Os
más grande que.
Tal vez debería construir Boost con la optimización de tamaño también, pero no sé dónde pasar esta opción en la línea de comandos b2.
En mi caso, boost 1.58 estaba compilando internamente con "-march = i686", pero mi código no lo era. Agregar "-march = i686" a mi proyecto eliminó toda la "sección duplicada".
Lección aprendida: asegúrese siempre minuciosamente de que todas las bibliotecas y el proyecto principal estén compilados con las mismas opciones de compilación.
Obtuve el mismo error cuando compilo mi código uso gcc-4.9.1 en MinGW32 con una lib que usa gcc-4.4.7 como compilador. Y también usé ccache para acelerar, ccache también es un problema. Elimine el caché en ~ / .chache / y vuelva a compilar, luego soluciono esto.