हमने हाल ही में GCC 5.1, libstdc++ and Dual ABI की एक रिपोर्ट पकड़ी है। ऐसा लगता है कि Clang is not aware of the GCC inline namespace changes है, इसलिए यह नामस्थानों या प्रतीकों के एक सेट के आधार पर कोड उत्पन्न करता है, जबकि जीसीसी ने नामस्थानों या प्रतीकों का एक और सेट उपयोग किया है। लिंक समय पर, गायब प्रतीकों के कारण समस्याएं हैं।abi :: cxx11 के साथ प्रतीकों के कारण समस्याओं को जोड़ना?
यदि मैं Dual ABI पृष्ठ को सही ढंग से पार्स कर रहा हूं, तो यह कुछ अतिरिक्त कठिनाइयों के साथ _GLIBCXX_USE_CXX11_ABI
और abi::cxx11
पर पिवोटिंग की बात की तरह दिखता है। अधिक पढ़ना Red Hat के ब्लॉग पर GCC5 and the C++11 ABI और The Case of GCC-5.1 and the Two C++ ABIs पर उपलब्ध है।
नीचे उबंटू 15 मशीन से है। मशीन जीसीसी 5.2.1 प्रदान करता है।
$ cat test.cxx
#include <string>
std::string foo __attribute__ ((visibility ("default")));
std::string bar __attribute__ ((visibility ("default")));
$ g++ -g3 -O2 -shared test.cxx -o test.so
$ nm test.so | grep _Z3
...
0000201c B _Z3barB5cxx11
00002034 B _Z3fooB5cxx11
$ echo _Z3fooB5cxx11 _Z3barB5cxx11 | c++filt
foo[abi:cxx11] bar[abi:cxx11]
मैं दोनों सजावट का उपयोग कर ("सह-अस्तित्व" रेड हैट ब्लॉग यह कहता है के रूप में) प्रतीकों के साथ एक द्विआधारी कैसे बना सकता है?
या, हमारे लिए कौन से विकल्प उपलब्ध हैं?
मैं उपयोगकर्ताओं के लिए "यह सिर्फ काम करता है" प्राप्त करने की कोशिश कर रहा हूं। मुझे कोई परवाह नहीं है कि दो अलग-अलग व्यवहार हैं (std::string
में कॉपी-ऑन-राइट की कमी है, जबकि std::string[abi:cxx11]
कॉपी-ऑन-राइट प्रदान करता है)। या, एक दूसरे के लिए उपनाम हो सकता है।
डेबियन में Debian Bug report logs: Bugs tagged libstdc++-cxx11 पर समान बग का बोतलबंद है। उनका समाधान नई एबीआई के तहत सबकुछ पुनर्निर्माण करना था, लेकिन यह एबीआई परिवर्तनों के मिश्रण/मिलान करने वाले कंपाइलर्स मॉड्यूल के कोने मामले को संभाल नहीं पाया।
ऐप्पल दुनिया में, मुझे लगता है कि यह एक वसा बाइनरी के करीब है। लेकिन मुझे यकीन नहीं है कि लिनक्स/जीसीसी दुनिया में क्या करना है। अंत में, हम इस बात पर नियंत्रण नहीं करते कि डिस्ट्रो लाइब्रेरी का निर्माण कैसे करता है, और हम नियंत्रित नहीं करते कि लाइब्रेरी के साथ अनुप्रयोगों को जोड़ने के लिए कौन से कंपाइलर्स का उपयोग किया जाता है।
आपका उत्पाद क्या है? एक पुस्तकालय या एक कार्यक्रम? –
@ एनएम। - उत्पाद वेई दाई [क्रिप्टो ++] (http://www.cryptopp.com/) है। इसकी एक सी ++ लाइब्रेरी है। यह डेबियन द्वारा निर्मित और distro के हिस्से के रूप में आपूर्ति की। – jww