असफल रहा स्थिर बढ़ावा पुस्तकालयों (के साथ कुछ बहुत ही अजीब समस्या है, के रूप में वसा/सार्वभौमिक (x86/x86_64) पुस्तकालयों संकलित की समस्या हो रही बूस्ट MacPorts से 1.45.0-2) जीसीसी 4.5 के साथ मैक ओएस एक्स 10.6.6 के तहत।मैक ओएस एक्स और स्थिर बढ़ावा libs -> std :: स्ट्रिंग
त्रुटि संदेश
main(78485) malloc: *** error for object 0x1000e0b20: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
[1] 78485 abort (core dumped)
है और उदाहरण कोड का एक छोटा सा जो इस समस्या को गति प्रदान करेगा:
#define BOOST_FILESYSTEM_VERSION 3
#include <boost/filesystem.hpp>
#include <iostream>
int main (int argc, char **argv) {
std::cout << boost::filesystem::current_path().string() << '\n';
}
जब द्विआधारी में स्थिर बढ़ावा पुस्तकालयों को जोड़ने यह समस्या हमेशा होता है। हालांकि गतिशील रूप से लिंक करना ठीक काम करेगा।
इससे भी अधिक जानकारी:
जीसीसी संस्करण का परीक्षण किया/इस्तेमाल किया: एप्पल जीसीसी 4.2.1 (काम करता है/चलाता है), MacPorts जीसीसी 4.5.2 (विफल रहता है)
झंडे का परीक्षण/इस्तेमाल किया: कोई नहीं, -fPIC, -fPIC जी, -fPIC जी -ggdb3 -gdwarf -2 -O0
सांसद जीसीसी के साथ gdb उत्पादन 4.5.2/उपरोक्त में से किसी झंडे:
(gdb) run
Starting program: /Users/ionic/crashtest/bin/ctest Reading symbols for shared libraries .++++++++++++++++++++++.................................................................................................................. done
ctest(80366) malloc: *** error for object 0x100fe6b20: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
Program received signal SIGABRT, Aborted. 0x00007fff81a4e616 in __kill()
(gdb) bt full
#0 0x00007fff81a4e616 in __kill() No symbol table info available.
#1 0x00007fff81aeecca in abort() No symbol table info available.
#2 0x00007fff81a066f5 in free() No symbol table info available.
#3 0x0000000100f763e9 in std::string::_M_mutate() No symbol table info available.
#4 0x0000000100f7644c in std::string::_M_replace_safe() No symbol table info available.
#5 0x0000000100f77edd in std::string::replace() No symbol table info available.
#6 0x000000010000713d in std::string::_M_rep() at /usr/include/c++/4.2.1/bits/basic_string.h:1412
to = (string &) Cannot access memory at address 0x0
ऐसा लगता है कि यह ऐप्पल (काफी पुराना) जीसीसी संस्करण के साथ ठीक काम कर रहा है, लेकिन मैकपॉर्ट्स द्वारा नए जीसीसी निर्माण के साथ बुरी तरह विफल रहा है।
otool एल ctest:
./../../bin/ctest:
/opt/local/lib/gcc45/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.14.0)
/usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 625.0.0)
/opt/local/lib/gcc45/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.1)
मैं जीसीसी 4.2 और _GLIBCXX_DEBUG मैक्रो सेट के साथ काफी समान ओएस एक्स बग के लिए विभिन्न रिपोर्टों को देखा है, लेकिन यह एक और भी अधिक सामान्य लगता है, के रूप में मैं न तो एक्सकोड का उपयोग कर रहा हूं, न ही मैक्रो सेट कर रहा हूं (यहां तक कि इसे परिभाषित करने में भी मदद नहीं करता है। मैंने यह सुनिश्चित करने की कोशिश की कि यह वास्तव में इस समस्या से संबंधित नहीं है।) इस समस्या से संबंधित नहीं लगता है, ऐप्पल के जीसीसी के साथ एक ही कोड ठीक काम कर रहा है।
एप्पल जीसीसी शामिल नहीं है के रूप में किसी भी C++ 0x अभी तक सुविधाओं, मैं वास्तव में वर्तमान में स्थिर जीसीसी संस्करण का उपयोग करना चाहते हैं।
किसी को यह क्यों हो रहा है के लिए किसी भी संकेत दिए गए या यहाँ तक कि शायद एक समाधान (बजाय गतिशील पुस्तकालय वैकल्पिक हल का उपयोग) है?
सादर,
मिहाई
बढ़ावा का कौन सा संस्करण? –
मैंने पोस्ट को थोड़ा सा अपडेट किया है और ब्रांड को नई महत्वपूर्ण जानकारी जोड़ दी है। :) – Ionic
बूस्ट संकलित करने के लिए जीसीसी और libstdC++ के कौन से संस्करणों का उपयोग किया गया था? अगर ऐप्पल द्वारा प्रदान किया गया है, तो मुझे लगता है कि मैकपॉर्ट्स से जीसीसी के साथ बाइनरी-संगत नहीं है। – leedm777