2013-01-06 6 views
10

संकलक: 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.7zमैं जब आकार अनुकूलन (-Os) के साथ boost_regex संकलन 'डुप्लिकेट खंड' त्रुटियों मिला

बढ़ावा: http://sourceforge.net/projects/boost/files/boost/1.52.0/boost_1_52_0.7z

(दोनों डी पर: ड्राइव)

boost_regex साथ संकलित:

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

कोड:

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

मानकों के साथ संकलित:

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

त्रुटि:

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 

ठीक संकलित है, लेकिन मैं अभी तक यह और अधिक जटिल कोड में काम हो जाएगा अगर परीक्षण नहीं किया। -Os स्विच को हटाने से त्रुटि साफ़ हो जाती है लेकिन ऐप का आकार 2x बड़ा होता है।

शायद मैं भी भी आकार अनुकूलन के साथ बूस्ट का निर्माण करना चाहिए, लेकिन मैं नहीं जानता कि जहां b2 कमांड लाइन में इस विकल्प को पारित करने के लिए।

+0

[यह अनुत्तरित प्रश्न] (http://stackoverflow.com/questions/11635485/regex-boost-library-linking-in-release-mode-warns-duplicate-section-has-differe) एक ही समस्या है। टिप्पणियों में से एक सुझाव देता है कि समस्या mingw-w64 को अलग किया जा सकता है। मिंगव-बिल्ड का जी ++ 4.8.0 भी इस समस्या को प्रस्तुत करता है और फेडोरा 17 का जी ++ 4.7.2 नहीं करता है, इसलिए वह सही हो सकता है। –

+1

जैसा कि आपने आकार अनुकूलन का उपयोग करके कहा था (आपके बूस्ट बिल्ड कमांड में 'ऑप्टिमाइज़ेशन = स्पेस' जोड़ना) समस्या को दूर करने लगता है। यदि आप पुष्टि कर सकते हैं कि यह काम करता है तो आपको इसे एक उत्तर के रूप में रखना चाहिए। पीएस: ठीक है, समस्या अब उलट दी गई है, जब भी आप '-ओएस' का उपयोग नहीं करते हैं तो संकलक उन त्रुटियों/चेतावनियों को उजागर करता है। –

+0

@ एलोनसमिज़: धन्यवाद! यह काम। समस्या यह थी कि मुझे यह विकल्प नहीं मिला, यह 'b2 --help' और न ही '--help-options' द्वारा मुद्रित नहीं है। – rsk82

उत्तर

2

मेरा मानना ​​है कि यह एक संकलक बग है। मेरे मामले में कामकाज -fno-tree-vectorize जोड़ना था।

15

मेरे मामले बढ़ावा 1.58 में आंतरिक रूप से "मार्च = i686" संकलन किया गया था, लेकिन मेरे कोड नहीं था। मेरे प्रोजेक्ट में "-march = i686" जोड़ना सभी "डुप्लिकेट सेक्शन" से छुटकारा पा लिया।

सबक सीखा: हमेशा बड़ी मेहनत से यह सुनिश्चित करें कि सभी पुस्तकालयों और मुख्य परियोजना समान संकलक विकल्पों के साथ संकलित कर रहे हैं।

+0

मेरे लिए वही है। बूस्ट 1.57 और 1.58 के बीच यह चुपचाप बदल गया होगा। मुझे खोजने के लिए कुछ समय लगा। – SebastianK

+0

"-march = i686" mingw के साथ क्रिप्टो ++ के लिए काम किया। धन्यवाद –

0

मैं जब मैं एक lib जो संकलक के रूप में जीसीसी-4.4.7 का उपयोग के साथ MinGW32 में मेरी कोड उपयोग जीसीसी-4.9.1 संकलन एक ही त्रुटि मिली। और मैंने गति के लिए सीसीएच का भी उपयोग किया, सीसीएसी भी एक समस्या है। ~/.ccache/में कैश को हटाएं और फिर पुन: संकलित करें, फिर मैं इसे हल करता हूं।

संबंधित मुद्दे