MATLAB في C C ++ و C C ++ في MATLAB [مغلق
-
21-09-2019 - |
سؤال
يبدو أن هناك عدة طرق للاتصال بـ MATLAB في C C ++ والاتصال C C ++ في MATLAB. بينما أحاول إدراجها هنا ، يرجى الإشارة إلى ذلك إذا فاتني شيء ما.
للاتصال C C ++ في MATLAB ، هناك أيضًا طريقتان. الأول هو استدعاء وظائف في المكتبات المشتركة. والثاني هو بناء رمز C C ++ في ملفات MEX ثنائية ، والتي سيتم استدعاؤها من سطر أوامر MATLAB. بالنسبة للطريقة الأولى ، هل المكتبات المشتركة C هي مجرد مواد عامة ، أي دون تغيير إلى رمز C الخاص بها لـ MATLAB ومجمعها من برنامج التحويل البرمجي العام مثل GCC؟
للاتصال برمز MATLAB في C C ++ ، هناك طريقتان متاحتان. أول واحد هو محرك ماتلب. والثاني هو استخدام MATLAB Compiler MCC لإنشاء مكتبات مشتركة C أو C ++ من رمز MATLAB الخاص بك.
إلى جانب MATLAB و C C ++ ، يمكن التواصل عبر كتابة البيانات وقراءةها من وإلى بعض الملفات (على سبيل المثال ملف MAT ، ملف نصي).
وجود أكثر من طرق لإنجاز كل هدف من الأهداف هنا ، هل يمكن أن تخبرني ما هي الحالات الأفضل لاستخدام أي منها؟ IE وظائف الاتصال في C مشترك المكتبات مقابل بناء C C ++ في ملفات MEX ثنائية ، MATLAB محرك مقابل تجميع كود MATLAB في مكتبة مشتركة C C ++.
شكرا مع تحياتي!
المحلول
لديّ فقط تعليمات مع استدعاء C أو C ++ من MATLAB. يبدو لي أن الفرق الوحيد بين وظائف الاتصال في مكتبة مشتركة ووظائف الاتصال من ملف MEX هو أنه مع مكتبة مشتركة ، يجب عليك الاتصال بالوظيفة مع "Calllib" وهي وظيفة نوع سطر الأوامر والسماح بوظائف MEX يمكنك الاتصال بالوظائف كما لو كانت وظائف مدمجة ، لذا فإن الواجهة أكثر نظافة.
اقتراحي هو استخدام ملفات mex إذا
- أنت تستخدم C ++ (قد تضطر إلى كتابة غلاف لاستخدام C ++ في مكتبة مشتركة)
- أنت تستخدم MATLAB كغراء لعدد كبير من إجراءات C أو C ++ المحسنة. سترغب في أن تكون قادرًا على الاتصال بهم بشكل نظيف.
استخدم المكتبة المشتركة إذا
- لديك بالفعل مكتبة C موجودة يمكن استخدامها دون تعديل.
- تحتاج فقط إلى عدد صغير من المكالمات إلى وظائف C.
حقا ، يتعلق الأمر بالواجهة. أنا شخصياً أفضل مسار ملف MEX لأنه يوفر أنظف واجهة من MATLAB إلى وظيفة C أو C ++ الخاصة بك. يمكنك تسميتها مثل وظيفة أخرى فقط مع أنواع MATLAB القياسية. مع مكتبة مشتركة ، قد تضطر إلى القيام ببعض تنسيق البيانات قبل الاتصال بوظيفة المكتبة
نصائح أخرى
أعتقد أن الأساليب التي سميتها صحيحة (لقد مر بعض الوقت منذ أن استخدمتها)
MATLAB C-COMPILER ليس مميزًا حقًا ؛ من الممكن استخدام المترجمين المختلفين. يرى حلقة الوصل قائمة المترجمين المدعومة. هذا لا يشمل GCC ، ولكن يتم تضمين MS Visual Studio. سوف تواجه مشكلات عند الارتباط بالمكتبات المقدمة.
في الأساس: استدعاء Matlab من C هو شيء ستفعله إذا كنت بحاجة إلى واجهة ضيقة ؛ على سبيل المثال ، إذا كنت ترغب في مزامنة أداة 2 ، أو يتطلب وظيفة S (Simulink) معلومات إضافية. ولكن بعد ذلك ، يسمى مثل هذا الملف بشكل لارتفاع بواسطة MATLAB/SIMULINK في المقام الأول.
الاتصال C من Matlab هو ما تريد القيام به إذا كتبت وظائف S أو امتدادات خاصة بك إلى Matlab.
الاختيار بين C و C ++ هو لك ؛ إذا بدأت من ورقة فارغة أقترح استخدام C ++ ؛ لا تحتاج إلى استخدام الوظائف الكاملة ولكنها تتيح المزيد من الحرية. أيضا المزيد من المكتبات تميل إلى أن تكون متاحة لـ C ++ في الوقت الحاضر.
C هي اللغة المفضلة إذا كنت بحاجة إلى الترحيل إلى بيئات مختلفة جدًا ؛ أي لتجميع C إلى DSPs على سبيل المثال. أو إذا كان لديك رمز قديم في C للبدء من. خلط C و C ++ ممكن ، ولكن يمكن أن يكون مرهقًا بعض الشيء ؛ أنا متأكد من أنك ستجد مواضيع على Stackoverflow حول هذا الموضوع وحده.