क्या मुझे libc ++ या libstdc ++ का उपयोग करना चाहिए? [बन्द है]


91

मैं c / c ++ का उपयोग करके osx और linux दोनों के लिए कमांड लाइन इंटरफ़ेस निष्पादक विकसित कर रहा हूं। परियोजना opencv के खिलाफ लिंक होगी। क्या मुझे libc ++ या libstdc ++ का उपयोग करना चाहिए?


1
मुझे नहीं पता, लेकिन आपको यह रुचि मिल सकती है: clang-developers.42468.n3.nabble.com/…
डैरेनडब्ल्यू

3
यह उत्तर मददगार हो सकता है।
यांताओ एक्सई

2
यदि आप opencv के खिलाफ लिंक करते हैं, तो libstdc ++ का उपयोग करें। यहाँ क्यों stackoverflow.com/questions/13037659/…
Loozie

जवाबों:


89

मैं प्रत्येक OS के लिए मूल पुस्तकालय का उपयोग करूंगा अर्थात GNU / Linux पर libstdc ++ और Mac OS X पर libcd ++।

libc ++ GNU / Linux पर 100% पूर्ण नहीं है, और libstdc ++ अधिक पूर्ण होने पर इसका उपयोग करने का कोई वास्तविक लाभ नहीं है। इसके अलावा, यदि आप C ++ में लिखी गई किसी अन्य लाइब्रेरी से लिंक करना चाहते हैं, तो वे लगभग निश्चित रूप से libstdc ++ के साथ बनाई गई हैं, इसलिए आपको उनका उपयोग करने के लिए भी लिंक करना होगा।

अधिक जानकारी यहां विभिन्न प्लेटफार्मों पर libc की पूर्णता ++ के बारे में।


3
क्या आप लिनक्स पर libc ++ की पूर्णता स्थिति के बारे में विस्तृत / लिंक दे सकते हैं? मुझे समझ में नहीं आता है कि यह क्यों मंच-विशिष्ट होगा क्योंकि libc ++ मानक लाइब्रेरी हेडर का एक समूह है। या क्या आपका मतलब है कि एक को एलएलवीएम रनटाइम पुस्तकालयों के लिए क्लेंग रिट का निर्माण करने की आवश्यकता है जो लिनक्स पर अच्छी तरह से समर्थित नहीं हैं?
टेम्प्लेटेक्स

1
@TemplateRex, मुझे वर्तमान स्थिति का पता नहीं है, आप libcxx.llvm.org पर देख सकते हैं । मैं libc ++ का पालन नहीं करता, इसलिए आप गलत व्यक्ति से पूछ रहे हैं, लेकिन क्या आप यह सुझाव दे रहे हैं कि "मानक लाइब्रेरी हेडर का एक गुच्छा" में कभी भी कोई प्लेटफ़ॉर्म-विशिष्ट कोड नहीं होगा?
जोनाथन वैक्ली 12

अच्छी तरह से जब से आप मैक ओएस एक्स चला रहे हैं, उसी ऐप्पल हार्डवेयर पर लिनक्स को स्थापित कर सकते हैं, मुझे आश्चर्य है कि सी ++ हेडर में प्लेटफॉर्म की निर्भरता कहां से आएगी? हो सकता है कि बिल्टइन सीपीयू इंट्रिंसिक्स या आईओ और अपवाद हैंडलिंग सामान के आसपास के कुछ रैपर सिस्टम पर निर्भर हों, लेकिन मेरी समझ यह थी कि इस तरह के सामान को लिब्रांकेर्ट टाइप बाइनरी लेयर्स में संभाला जाता है। क्या मानक लाइब्रेरी हेडर अधिक या कम प्लग-इन नहीं होना चाहिए?
टेम्प्लेटेक्स

4
मैं हार्डवेयर की बात नहीं कर रहा हूँ। फिर से, मुझे libc ++ के बारे में कोई पता नहीं है, लेकिन अधिकांश C ++ मानक पुस्तकालय OS की C लाइब्रेरी पर लागू होते हैं, और उदाहरण के std::ctype_base::maskलिए मानों से <ctype.h>स्थिरांक तक पूरी तरह से प्लेटफ़ॉर्म-निर्भर है। (CPU इंट्रिंसिक्स कंपाइलर द्वारा प्रदान किया जाता है, अपवाद हैंडलिंग एक निम्न-स्तरीय ABI परत द्वारा किया जाता है, लेकिन IO आमतौर पर पूरी तरह से C ++ और C पुस्तकालयों में किया जाता है, न कि निम्न-स्तरीय सामान)।
जोनाथन वैक्ली

1
@abergmeier, यह एक संगीन तर्क है, क्योंकि (जब GCC या अन्य पात्र संकलन प्रक्रियाओं के साथ प्रयोग किया जाता है) libstdc ++ कोड का उपयोग करने पर कोई प्रतिबंध नहीं लगाता है, चाहे वह गतिशील या सांख्यिकीय रूप से जुड़ा हो। यह LGPL नहीं है। कृपया FUD न फैलाएं। gcc.gnu.org/onbuildocs/libstdc++/faq.html#faq.license.what
जोनाथन

30

प्रमुख लिनक्स वितरण LLVM libc ++ प्रदान नहीं करते हैं, क्योंकि:

  1. Apple और FreeBSD के विपरीत, GPL + 3 कोई समस्या नहीं है, इसलिए यहां एक और स्टैक लागू करने की आवश्यकता नहीं है।
  2. लिनक्स घटक उम्र के लिए GNU libstd ++ के आसपास विकसित किए गए हैं। उनमें से कुछ किसी और चीज पर नहीं बनते।
  3. जबकि libc ++ नई विशेषताओं में मजबूत है, इसमें विरासत कोड के साथ कुछ समस्याएं हैं।

यदि अंततः libc ++ वितरण का हिस्सा बन गया, तो यह एक वैकल्पिक घटक के रूप में होगा। इसके खिलाफ लिंक करने के लिए संभवतः अतिरिक्त विकल्पों की आवश्यकता होगी।

जैसे कि जोनाथन ने कहा, आपको डिफ़ॉल्ट रूप से जो भी उपकरण शामिल है, उसका उपयोग करना चाहिए। GCC प्रतिस्थापन के रूप में कॉन्फ़िगर किए जाने के बाद से Clang लिनक्स में उपयोग करने के लिए सुरक्षित है, इसलिए उस पहलू में आपको 2 संकलक के बारे में चिंता करने की आवश्यकता नहीं है। इसके अलावा जब आप दो प्लेटफार्मों को लक्षित कर रहे हैं, तो आपको सीमेक पर एक नज़र डालनी चाहिए।


2
Clang एक GCC प्रतिस्थापन नहीं है ... बस एक और संकलक।
इसहाक पास्कल

4
@IsaacPascual क्या मारियो का मतलब है आधिकारिक तौर पर अपने डिजाइन लक्ष्यों में एक प्रमुख स्थान पर एक संकलक के प्रतिस्थापन के लिए एक ड्रॉप-इन प्रतिस्थापन है जो आप इसे चलाते हैं (उदाहरण के लिए जब लिनक्स पर चलाते हैं)। इंटेल के संकलक afaik के लिए भी। यह एक व्यापक अपनाने का उनका तरीका है।
जोहान बोले
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.