تجميع مكتبة MATLAB المشتركة مع صندوق أدوات معالجة الصور

StackOverflow https://stackoverflow.com/questions/3804585

سؤال

أحاول تجميع المكتبة المشتركة C من Matlab. يستخدم رمز MATLAB الخاص بي الكثير من وظائف معالجة الصور. لذا ، فإن التجميع يعمل بشكل جيد ، لكن عندما أتصل بـ DLL من طلبي ، أحصل على رسائل مثل:

"وظيفة أو طريقة غير محددة" XYZ "لوسائط الإدخال من النوع المزدوج".

لقد تحقق من حججاتي على ما يرام - إنها ليست مشكلة نوع. لذلك ، حاولت إضافة %#function XYZ إلى ملف .m ، لكن هذا لم يساعد أي شيء. ثم حاولت استخدام -a العلم في أمر التجميع الخاص بي:

eval(['mcc -v -N -W lib:cshared -d ' clibdir ' -T link:lib -a edge' allFiles]); 

لكنه فشل في التجميع مع:

خطأ Depfun: "غير قادر على تحديد موقع الحافة كدالة على مسار MATLAB"

لقد تحقق من أن ملفات معالجة الصور موجودة على جهاز الكمبيوتر الخاص بي (يمكنني تشغيل كل شيء من Matlab دون مشكلة) ويشير طريقي إلى الدليل الذي يحتوي عليها.

لقد حاولت أيضًا نسخ ملفات .m Toolbox إلى دليل العمل الخاص بي ، لكن البالونات بسرعة في الكثير من الملفات. وبالنسبة لبعض الوظائف ، لا يوجد .M - مجرد .mex - ولم أجد طريقة لتضمين ملف MEX في .DLL.

ماذا ينقصني؟

هل كانت مفيدة؟

المحلول

هل حاولت تضمين مجلد صندوق أدوات معالجة الصور باستخدام -a اختيار؟ علي سبيل المثال:

mcc ... -a C:\Program Files\MATLAB\R2009a\toolbox\images\images

بحسب ال mcc توثيق, ، تتم إضافة جميع الملفات الموجودة في هذا المجلد ، وكذلك جميع الملفات في أي مجلدات فرعية ، إلى أرشيف CTF ، ويتم الحفاظ على الشجرة الفرعية للمجلد في أرشيف CTF.

إذا كنت لا ترغب في تضمين كل مقلع فرعي ، فيمكنك تحميل الملفات فقط في مجلد باستخدام نمط بطاقة Wildcard:

mcc ... -a C:\Program Files\MATLAB\R2009a\toolbox\images\images\*

قد يكون هذا ضروريًا إذا كان هناك مقلع فرعي قد يحتوي على وظائف أو نصوص يمكن أن تظل تلك الموجودة في المجلد الأصل. على سبيل المثال ، هناك edge.m وظيفة في المجلد الأصل C:\Program Files\MATLAB\R2009a\toolbox\images\images\, ، وهناك أ ja المجلد الفرعي الذي يحتوي على ملفات مساعدة اللغة اليابانية (على Windows) ، يسمى أحدها أيضًا edge.m. لا تريد إضافة هذا المجلد الفرعي عند التجميع ، حتى تتمكن من: إما:

  1. قم بإزالة هذا المجلد الفرعي مؤقتًا ، أضف المجلد الأصل بدون خيار Wildcard (لإضافة المجلدات الفرعية الأخرى التي تريدها) ، ثم أعد هذا المجلد.

  2. أضف المجلد الأصل مع خيار WildCard (لإضافة الملفات فقط) ، ثم إضافة المجلدات الفرعية التي تريدها بشكل منفصل (مثل @strel و private) مع إضافية -a أمر. ملاحظة: أنا غير متأكد مما إذا كانت إضافة المجلدات الفرعية بشكل منفصل ستحافظ على الشجرة الفرعية للمجلد في الدليل الأصل في أرشيف CTF بنفس طريقة خيار #1!

إذا كنت لا ترغب في تضمين قائمة كبيرة من الملفات التي قد لا يتم استخدامها ، فيمكنك بدلاً من ذلك محاولة استخدام الوظيفة depfun للحصول على قائمة التبعيات أولاً لرمز MATLAB الخاص بك. ثم من هذه القائمة ، يمكنك العثور على وظائف صندوق أدوات معالجة الصور المحددة التي يستخدمها الرمز وتضمينها فقط عند التجميع. منذ أن طلبت على وجه التحديد ، موضوع مجموعة الأخبار هذا يذكر كيفية تضمين ملف .mex:

mcc ... -a imreconstructmex.mexw32  %# For a 32-bit Windows mex file


ملاحظة: هنالك أيضا تقرير أخطاء Mathworks صادفت (الذي تحتاج إلى تسجيل دخول لرؤيته) يذكر مشكلة في تجميع التطبيقات باستخدام بعض وظائف صندوق أدوات معالجة الصور على Windows في R2009B. هناك حل بديل في الرابط أعلاه. تم إصلاح هذا الخطأ اعتبارًا من R2010A.

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