2013-01-06 7 views
10

compilatore: http://sourceforge.net/projects/mingwbuilds/files/host-windows/releases/4.7.2/32-bit/threads-posix/sjlj/x32-4.7.2-release-posix-sjlj-rev6.7zho avuto errori 'sezione duplicato' durante la compilazione boost_regex con l'ottimizzazione dimensioni (-Os)

spinta: http://sourceforge.net/projects/boost/files/boost/1.52.0/boost_1_52_0.7z

(sia su unità D:)

boost_regex compilato con:

b2 --prefix=D:\boost toolset=gcc --with-regex --layout=tagged release 

codice:

#include <boost\regex.hpp> 
int main() { 
    boost::regex reg("[a-z]+"); 
} 

compilato con parametri:

g++ -I "d:\boost" -Os -o test.exe test.cpp -static -L d:\boost\stage\lib -lboost_regex-mt 

errore:

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 ok, ma non ho ancora testato se si lavorerà in codice più complesso. La rimozione dello switch -Os cancella l'errore ma la dimensione dell'app è 2x più grande di quella.

Forse dovrei creare Boost anche con ottimizzazione delle dimensioni, ma non so dove passare questa opzione nella riga di comando di b2.

+0

[Questa domanda senza risposta] (http://stackoverflow.com/questions/11635485/regex-boost-library-linking-in-release-mode-warns-duplicate-section-has-differe) ha lo stesso problema. Uno dei commenti suggerisce che il problema potrebbe essere isolato su mingw-w64. Anche g ++ 4.8.0 di Mingw-build presenta questo problema e g + 4.7.2 di fedora 17 non lo fa, quindi potrebbe avere ragione. –

+1

Come hai detto usando l'ottimizzazione della dimensione (aggiungendo 'optimization = space' al tuo comando boost build) sembra rimuovere il problema. Dovresti metterlo come risposta se puoi confermare che funziona. PS: Bene, il problema ora è invertito, il compilatore sputa quegli errori/avvertenze ogni volta che non usi '-Os'. –

+0

@llonesmiz: grazie! questo funziona Il problema era che non riuscivo a trovare questa opzione, non è stampata da 'b2 --help' né' --help-options'. – rsk82

risposta

2

Credo che questo sia un bug del compilatore. La soluzione alternativa nel mio caso era aggiungere -fno-tree-vectorize.

15

Nel mio caso la spinta 1.58 è stata compilata internamente con "-march = i686", ma il mio codice non lo era. Aggiungendo "-march = i686" al mio progetto è stata eliminata la "sezione duplicata".

lezione appresa: assicurati sempre accuratamente che tutte le librerie e il progetto principale siano compilati con opzioni di compilazione identiche.

+0

Lo stesso per me. Tra boost 1.57 e 1.58 questo deve essere cambiato in silenzio. Mi ci è voluto un po 'di tempo per trovarlo. – SebastianK

+0

"-march = i686" ha funzionato per crypto ++ con mingw. Grazie –

0

Ho ottenuto lo stesso errore quando compilo il mio codice uso gcc-4.9.1 in MinGW32 con una lib che usa gcc-4.4.7 come compilatore. E ho anche usato ccache per accelerare, ccache è anche un problema. Rimuovere la cache in ~/.ccache/e ricompilata, quindi risolvo il problema.

Problemi correlati