2012-03-03 16 views
6

मैं (कार्यकुशलता के लिए अपने सॉफ़्टवेयर के लिए एक कोड पीढ़ी के पीछे के अंत के रूप में LLVM उपयोग करने के लिए कोशिश कर रहा हूँ और सिर्फ महसूस किया कि LLVM C++ अपवाद से निपटने के लिए समर्थन के बिना संकलित किया गया था)। मेरे सॉफ़्टवेयर में, हालांकि, मैं अपवाद हैंडलिंग का व्यापक रूप से उपयोग करता हूं।कोड के साथ लिंक करना है कि अपवाद को संभालने का समर्थन नहीं करता (सी ++/LLVM)

यदि मैं अपने सभी कॉलबैक फ़ंक्शंस को ट्राइक-कैच-ब्लॉक में लपेटता हूं (ताकि कोई अपवाद को एलएलवीएम कोड के माध्यम से "प्रचारित करने की आवश्यकता न हो), तो क्या मैं सुरक्षित रूप से" -फनो-अपवाद "(जीसीसी के लिए) को हटा सकता हूं। मेरे लिंकर झंडे से? (यह ध्वज आमतौर पर llvm से लिंक करते समय आवश्यक होता है, क्योंकि llvm-config --cxxflags करते समय यह चालू हो जाता है)।

यदि नहीं, तो स्थिति परिवर्तन अगर मैं कार्यों "फेंकता है()" के साथ घोषित साथ LLVM कार्यों लपेट करता है? इन कार्यों के कार्यान्वयन को -फनो-अपवादों के साथ संकलित किया जा सकता है।

+0

मैं एबीआई की स्थिरता पर शर्त नहीं लगाऊंगा, लेकिन कौन जानता है? अपवाद सक्षम के साथ स्वयं को एलएलवीएम संकलित करना आसान और सुरक्षित हो सकता है। – delnan

+0

@delnan संकलन llvm एक विकल्प नहीं है। मेरे सॉफ़्टवेयर का उपयोग विभिन्न प्लेटफ़ॉर्म (लिनक्स, मैक, विंडोज़) पर कई लोगों द्वारा किया जाता है और मुझे आपको डिफ़ॉल्ट llvm स्थापना पर भरोसा करने की आवश्यकता होती है जो आपको मिलता है। apt-get से। – Joel

+0

@ डेलनान: मुझे एबीआई संगतता के बारे में बहुत कुछ पता नहीं है, लेकिन अगर मैं फेंकने के साथ फंसे घोषित करता हूं तो क्या मैं इसे इस मामले में प्राप्त करूंगा? मैंने तदनुसार सवाल संशोधित किया। – Joel

उत्तर

3

अगर मैं कोशिश पकड़ ब्लॉक में सभी मेरी कॉलबैक कार्यों लपेट (ताकि कोई अपवाद नहीं LLVM कोड "के माध्यम से" प्रचारित करने की आवश्यकता है), मैं तो सुरक्षित रूप से "-fno-अपवाद" निकाल सकते हैं (के लिए जीसीसी) मेरे लिंकर झंडे से?

हां, मान लीजिए कि आपके पास अपवादों को फेंकने के कारण होने वाली किसी भी परिस्थिति की रिपोर्ट करने का एक उपयुक्त तरीका है।

-fexceptions सी ++ के लिए डिफ़ॉल्ट है। -fno-exceptions एक साथ सी कोड डिफ़ॉल्ट विकल्प के साथ संकलित के साथ डिफ़ॉल्ट विकल्पों के साथ संकलित सभी मिश्रण सी ++ कोड में कोई समस्या है सी के लिए डिफ़ॉल्ट है, इसलिए वहाँ -fno-exceptions साथ -fexceptions मिश्रण एक समस्या नहीं हो सकता है।

लेकिन को हटाने के बजाय -fexceptions जोड़ने पर विचार करें: जीसीसी जटिल होने के समान ही कमांड लाइन विकल्पों को पार्स करना, और ऐसा करने का प्रयास करने की कोई आवश्यकता नहीं है।

+0

ठीक नहीं था! मुझे बस इतना ही पता होना चाहिए। सी के समानांतर के बारे में नहीं सोचा था धन्यवाद! – Joel

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