में संक्रमण के दौरान बाहरी पुस्तकालयों (उदा। बूस्ट) का प्रबंधन करना मैं अपनी वर्तमान परियोजना को सी ++ 11 में ले जाना चाहता हूं। कोड सभी clang ++ -std = C++ 0x का उपयोग करके संकलित करता है। यह आसान हिस्सा है :-)। मुश्किल हिस्सा बाहरी पुस्तकालयों से निपट रहा है। कोई बाहरी पुस्तकालयों के साथ किसी की सी ++ 11 ऑब्जेक्ट्स को जोड़ने पर भरोसा नहीं कर सकता है जिसे सी ++ 11 के साथ संकलित नहीं किया गया था (http://gcc.gnu.org/wiki/Cxx11AbiCompatibility देखें)। बूस्ट, उदाहरण के लिए, निश्चित रूप से फिर से निर्माण की आवश्यकता है (Why can't clang with libc++ in c++0x mode link this boost::program_options example?)। मेरे पास उपयोग की जाने वाली सभी बाहरी पुस्तकालयों का स्रोत है, इसलिए मैं (कुछ दर्द के साथ) सैद्धांतिक रूप से इन libs को C++ 11 के साथ फिर से बना सकता हूं। हालांकि, कि अब भी मुझे कुछ समस्याओं के साथ छोड़ देता है:सी ++ 11
एक मिश्रित सी ++ 03/सी ++ 11 वातावरण में विकास: मैं सी ++ 03 है कि कभी कभी रखरखाव की आवश्यकता होती का उपयोग कर कुछ पुराने प्रोजेक्ट नहीं है। बेशक, मैं इन्हें बाहरी पुस्तकालयों के मौजूदा संस्करणों से जोड़ना चाहता हूं। लेकिन मेरी वर्तमान (और नई) परियोजनाओं के लिए, मैं पुस्तकालयों के अपने पुन: निर्मित सी ++ 11 संस्करणों से लिंक करना चाहता हूं। मैं इसका सामना करने के लिए अपने विकास वातावरण (वर्तमान में उबंटू 12.04 और मैक ओएस एक्स 10.7) कैसे व्यवस्थित करूं?
मुझे लगता है कि इस समस्या का सामना कई डेवलपर्स द्वारा किया जाएगा। यह दूर नहीं जा रहा है, लेकिन मुझे एक अनुशंसित और आम तौर पर अनुमोदित समाधान नहीं मिला है।
परिनियोजन: वर्तमान में, मैं क्लाउड में उबंटू 12.04 एलटीएस सर्वर पर तैनात हूं। अनुभव लिनक्स वितरण के साथ मानक पैकेज (उदा। Libboost) पर निर्भर (जहां संभव हो) पर निर्भर करता है। अगर मैं अपनी वर्तमान प्रोजेक्ट को सी ++ 11 पर ले जाता हूं, तो मेरी समझ यह है कि मुझे बाहरी पुस्तकालयों के अपने संस्करणों का निर्माण करना होगा। मेरा अनुमान है कि किसी बिंदु पर यह बदल जाएगा, और उनकी इच्छा सी ++ 11 संगतता वाले लाइब्रेरी पैकेज के 'मानक' संस्करण होंगे। क्या किसी को कोई विचार है जब कोई ऐसा होने की उम्मीद कर सकता है? और संभवतः इसके ऊपर उल्लिखित समस्या के मानक समाधान की आवश्यकता होगी - एक ही मंच पर सी ++ 03 libs और C++ 11 libs के समवर्ती अस्तित्व।
मुझे आशा है कि मुझे कुछ बुनियादी याद आ गया है ताकि इन समस्याओं को उचित जानकारी के एक पफ में गायब हो जाए! क्या मैं जल्द ही सी ++ 11 में जाने की कोशिश कर रहा हूं?
अद्यतन (2013-09-11): macports के लिए संबंधित चर्चा: https://lists.macosforge.org/pipermail/macports-users/2013-September/033383.html
"मैं अपने विकास वातावरण को कैसे व्यवस्थित कर सकता हूं ... इसका सामना करने के लिए?" - विभिन्न पुस्तकालय पथों को पारित करने के लिए अपने निर्माण तंत्र को समायोजित करें; क्लैंग और जीसीसी के लिए, '-एल' आपका मित्र है। – Xeo
@ ज़ीओ, मैं -एल से परिचित हूं। मुझे समझ में नहीं आता कि क्लैंग के पास जीसीसी के लिए एक अलग पुस्तकालय पथ क्यों समस्या हल करता है। शायद आप विस्तृत कर सकते हैं? यदि मुझे अलग-अलग निर्देशिकाओं में 'मानक' बाहरी पुस्तकालयों के विभिन्न निर्माणों (शायद सी ++ 11 के लिए एक, सी ++ 03 के लिए एक, और दोनों के साथ काम करने वाले libs के लिए) के निर्माण के लिए अपनी खुद की प्रक्रिया बनाने की आवश्यकता है, तो मैं मैं ऐसे स्थान पर हूं जहां मैं इससे बचूंगा, और एक ऐसा जो कि मैं उसी चक्र के आविष्कार (छोटे बदलाव) के ज़िलियंस के साथ साझा कर रहा हूं। क्या यह कैसे होगा? –
तो ...आप क्लैंग के साथ संकलन करते हैं लेकिन जीसीसी एबीआई दस्तावेज का उपयोग करते हैं? :) –