سؤال

يبدو أن هناك عدة طرق للاتصال بـ 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 حول هذا الموضوع وحده.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top