2009-10-21 15 views
13

मेरे पास कुछ कोड है जो मुझे टेम्पलेट्स पर भारी निर्भरता के कारण सी ++ में कोड करने की आवश्यकता है। मैं MATLAB से यह कोड कॉल करना चाहता हूं: मूल रूप से, मुझे कुछ पैरामीटर को C++ कोड में पास करने की आवश्यकता है, और C++ कोड MATLAB में एक मैट्रिक्स लौटाता है। मैंने सुना है कि यह MEX फ़ाइल नामक किसी चीज़ के साथ संभव है जिसे मैं अभी भी देख रहा हूं। हालांकि मुझे यकीन नहीं है कि इन एमईएक्स फ़ाइलों में क्या समर्थित है। क्या सी ++ (उदा। STL और Boost) समर्थित है? यह कितना मुश्किल है?MATLAB से C++ कोड पर कॉल करें?

संपादित करें: मुझे किसी भी साझा लाइब्रेरी की आवश्यकता नहीं है, केवल हेडर-केवल सामान जैसे shared_ptr

+0

[प्रशिक्षण वीडियो (फारसी)] (https://drive.google.com/drive/folders/0B56iSBYoI8YbN2ExMzA5NTMtN2Q1NS00MGMyLTk3ODctYjNiMzM1ZjgwMzg2) – Ghominejad

उत्तर

8

MEX-files Guide पर विशेष रूप से देखें, विशेष रूप से धारा 25-27 सी ++ के लिए। मूल STL/Boost डेटा संरचनाओं को काम करना चाहिए, लेकिन बूस्ट के साथ थ्रेडिंग एक समस्या हो सकती है।
cout सी ++, mexPrintf में अपेक्षा के अनुसार काम नहीं करेगा इसके बजाय इसका उपयोग किया जाना चाहिए।

+0

मैं अनुभव से कुछ सावधानी प्रदान करेगा। यदि आप सिमुलिंक और आरटीडब्लू का उपयोग करते हैं, तो फ्लैग-डीडीटी संकलित करते समय सेट किया जाता है। बूस्ट के कुछ गणित libs टेम्पलेट का उपयोग करें। -आरडीटी इन वर्गों को मारता है। यदि आप इस समस्या में भाग लेते हैं, तो मेक फ़ाइल में -DRT to -DRT = RT को बदलने का प्रयास करें। – KitsuneYMG

3

सी ++ एमईएक्स फ़ाइलों को लिखना निश्चित रूप से संभव है जो एसटीएल और बूस्ट का उपयोग करते हैं। आम तौर पर, आप सी ++ एमएक्स फ़ाइल के अंदर कृपया कुछ भी करने में सक्षम होना चाहिए। मुख्य व्यावहारिक प्रतिबंध यह है कि MATLAB पहले से ही पुस्तकालयों के समूह के साथ जहाज चलाता है, इसलिए यदि आप किसी भी बूस्ट टुकड़े का उपयोग कर रहे हैं, जिसे साझा लाइब्रेरी की आवश्यकता है (कुछ केवल हेडर हैं), तो आपको उस संस्करण से मेल खाना पड़ेगा जो आप संकलित करते हैं MATLAB के साथ उस शिपिंग के साथ।

उदाहरण के लिए, को बढ़ावा देने 1.36 के साथ MATLAB R2009b जहाजों (आप <matlabroot>/bin/< मेहराब > में पुस्तकालयों के नाम को देखकर बता सकते हैं)।

1

सी ++ फ़ाइलें वास्तव में बाहरी कंपाइलर द्वारा संकलित की जाती हैं। कौन सा एक (here समर्थित कंपाइलर्स की एक सूची है) का चयन करने के लिए mex -setup का उपयोग करें। इसलिए, आपके पास बहुत सी अजीब चीजें नहीं होनी चाहिए, न ही आप जो भी कर सकते हैं उससे बहुत प्रतिबंधित होना चाहिए।

मैंने पिछले साल कुछ मैक्स सामान किया था, और मेरी याददाश्त थोड़ा जंगली है, लेकिन आपको एमएक्स फ़ंक्शंस का उपयोग करके MATLAB सरणी बनाने की आवश्यकता है। मैंने MATLAB दस्तावेज़ को पर्याप्त पाया, और पूरा अनुभव बहुत दर्दनाक नहीं था।

1

एसटीएल निश्चित रूप से समर्थित है। शायद अभी तक बढ़ावा दें। मुद्दा यह है कि जब तक आप अपने कंप्यूटर पर अपना एसटीएल और बूस्ट तैनात करते हैं, तो आपको जाने के लिए अच्छा होना चाहिए।

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