2012-03-29 17 views
6

के हिस्से के रूप में सी ++ 11 कोड संकलित करना मेरे पास सी ++ 11 में लिखा गया कोड का एक टुकड़ा है, जिसे मैं जीएनयू/लिनक्स के लिए MATLAB MEX फ़ाइल के हिस्से के रूप में संकलित करना चाहता हूं।MATLAB MAX फ़ाइल

समस्या यह है कि लिनक्स पर MATLAB केवल जीसीसी 4.3 (और पहले) का समर्थन करता है, और जीसीसी 4.7 का समर्थन नहीं करता है जो मेरे सी ++ 11 कोड को संकलित करने के लिए आवश्यक है।

क्या समस्या के आसपास काम करना संभव है?

क्या जीसीसी 4.7 का उपयोग करके कुछ ऑब्जेक्ट फाइलों को संकलित करके इसे चारों ओर काम करना संभव होगा और उन्हें जीसीसी 4.3 का उपयोग कर एमईएक्स फ़ाइल में लिंक करना होगा?

अग्रिम धन्यवाद!

+0

समर्थित नहीं है आपका क्या मतलब है? अंत में मैक्स फ़ाइलें एक साधारण सी इंटरफ़ेस के साथ साझा पुस्तकालय हैं। तो आपको इसे मैन्युअल रूप से संकलित करना पड़ सकता है और कुछ हेडर संपादित करना पड़ सकता है लेकिन आपको इसे काम करने में सक्षम होना चाहिए। – Trass3r

+0

कृपया यह उत्तर देखें: http://stackoverflow.com/questions/25648949/error-when-compiling-c11-code-in-a-matlab-mex-file#25649348। मूल रूप से mexopts.sh में परिभाषित CFLAGS को -std = C++ 11 जोड़ना ठीक काम करता है। – efx

उत्तर

5

यदि आप अपने 4.3 एक्सटेंशन में कोई कोड लिख सकते हैं और इसे संकलित कर सकते हैं, तो बस 4.7 में लिखे गए एक साझा ऑब्जेक्ट को डिप्लोने के लिए कोड लिखें। अपने सभी सी ++ 11 काम करने के लिए 4.7 .so का उपयोग करें, और बस अपनी जानकारी को सी इंटरफ़ेस के माध्यम से पास करें। आपके द्वारा लिखे गए 4.3 बहिष्करण सभी MATLAB इंटरऑप सामग्री तक पहुंच सकते हैं।

आप इसे कई अन्य तरीकों से भी कर सकते हैं, लेकिन यह सबसे साफ है। आपको किसी ऑब्जेक्ट फ़ाइल को अपने 4.3 एक्सटेंशन से जोड़ने का प्रयास नहीं करना चाहिए, क्योंकि आप मानक लाइब्रेरी (काफी अलग) के दो अलग-अलग संस्करणों तक पहुंच पाएंगे, और आपके पास अलग-अलग लेआउट/विधियों/आदि के साथ समान कक्षाओं के एकाधिक परिभाषाएं नहीं हो सकती हैं। । आप सी ++ के वन डेफिनिशन नियम (ओडीआर) से लड़ेंगे।