2011-03-24 13 views
6

मैं एक मैक्स फ़ाइल में FFTW कोड चलाने की कोशिश कर रहा हूं। यह सख्ती से विकास और परीक्षण के उद्देश्य के लिए है। कुछ googling के बाद, मैं देखता हूं कि दूसरों ने कुछ ऐसा करने की कोशिश की है और समस्याओं से संबंधित है, लेकिन मुझे कोई समाधान नहीं मिला है। मैक्स फ़ाइल चलाने का प्रयास करते समय, मैटलैब मुझे बताता है:Matlab Mex फ़ाइल में FFTW को लिंक करना

??? ==> chirpTransform.mxCta का उपयोग करने में त्रुटि अमान्य MEX-file '\ हटा \ मेरी \ निर्देशिका \ + chirpTransform \ mxCta.mexw32': निर्दिष्ट प्रक्रिया नहीं मिली।

मैं मैक्स फ़ाइल बनाने के लिए मिनीगू के साथ gnumex का उपयोग कर रहा हूं क्योंकि एलसीसी में कुछ समस्याएं हैं। मैंने FFTW साइट (http://www.fftw.org/install/windows.html) से 32 बिट डीएलएल का उपयोग करने का प्रयास किया है। मैंने Matlab 200b bin निर्देशिका में fftwf3.dll का उपयोग करने का प्रयास किया है। मैंने एमएसआई/मिनजीडब्ल्यू का उपयोग कर स्रोत से डीएलएल बनाया। सभी मामलों में, परिणाम एक ही हैं। सभी मामलों में मैंने lib फ़ाइल उत्पन्न करने के लिए निम्नलिखित किया था।

c: \ gnumex \ mexdlltool.exe -d libfftw3f-3.def डी libfftw3f-3.dll -l libfftw3f.lib --as C: \ MinGW \ बिन \

as.exe

मैंने विजुअल स्टूडियो lib.exe उपकरण का उपयोग करने की कोशिश की और विभिन्न मैडेलटोल झंडे के साथ प्रयोग किया।

ऐसा प्रतीत होता है कि मैं सीधे matlab की loadlibrary कार्यक्षमता का उपयोग कर fftwf3-3.dll में फ़ंक्शंस को कॉल कर सकता हूं। चूंकि डीएलएल समस्या नहीं प्रतीत होता है, इसलिए मैंने fftwf3 का एक स्थिर संस्करण बनाने और इसे सीधे मैक्स फ़ाइल में जोड़ने की कोशिश की। मुझे एक ही परिणाम मिल गया! अगर मैं एफएफटीडब्ल्यू कोड हटा देता हूं, तो मैक्स फ़ाइल ठीक चलती है। मैंने अभी इस बिंदु पर छोड़ दिया है, और मैं परीक्षण के वैकल्पिक तरीकों के साथ आने के लिए तैयार हूं।

+1

"एलसीसी में कुछ समस्याएं हैं" - आपका क्या मतलब है? –

+0

क्या आप जिस मेक्स का उपयोग कर रहे हैं उसका कोड पोस्ट कर सकते हैं (कम से कम प्रासंगिक भागों)? – Amro

+9

मैटलैब वास्तव में अपने एफएफटी के लिए आंतरिक रूप से एफएफटीडब्ल्यू का उपयोग करता है। सुनिश्चित करें कि FFTW का आपका संस्करण उस मैटलैब का उपयोग नहीं करता है, या Matlab FFTW लाइब्रेरी के विरुद्ध लिंक करता है। – sfstewman

उत्तर

1

मैंने इस समस्या को अन्य मेक्स कार्यों के साथ चलाया है। मेरे अनुभव में, इसका आमतौर पर मतलब है कि एक निर्भरता मुद्दा है। कुछ निर्भरता स्थित नहीं है। Invalid MEX-File Error

यह पढ़ने दें, और उसके बाद निर्भरता वॉकर का उपयोग कर समस्या का निदान करने का प्रयास करें:

यहाँ इस मुद्दे पर TMW के दस्तावेज़ के लिए एक लिंक है।

0

यह एक लंबा समय रहा है, और मेरा सेटअप बदल गया है, लेकिन यह अब मेरे लिए काम करता है। मुझे संदेह है कि होगामाफोन सही था। मैक्स डीएल (और यह मेरे रास्ते में नहीं था) के रूप में शायद उसी निर्देशिका में fftw dll नहीं था। वास्तव में, 64 बिट Matlab 2016a आपको अभी भी एक चेतावनी देता है कि मैक्स फ़ाइल नहीं ढूंढ पा रहा है, वास्तव में, यह एक निर्भरता है जो गायब है।

मेरा वर्तमान सेटअप डिफ़ॉल्ट रूप से विजुअल स्टूडियो 2013 सी ++ कंपाइलर का उपयोग कर रहा है। जैसा कि fftw वेबसाइट पर बताया गया है, आपको लिंक करने के लिए एक lib फ़ाइल उत्पन्न करने की आवश्यकता है। आप विजुअल स्टूडियो कमांड प्रॉम्प्ट को नियमित कमांड प्रॉम्प्ट से चला सकते हैं जैसे:

"%VS120COMNTOOLS%VsDevCmd.bat" 

फिर डीफ़ फ़ाइल के साथ निर्देशिका में निम्न चलाएं।

lib /machine:x64 /def:libfftw3f-3.def 

और संकलित करें।

mex mxCta.c cta.c -I../fftw -L../fftw -llibfftw3f-3.lib 

शायद एक और संभावना यह है कि gnumex ने मेक्सिको डीएल में कुछ निर्भरता पेश की। अब मुझे याद नहीं है कि मैंने gnumex का सफलतापूर्वक अन्य कोड का परीक्षण किया था या नहीं। साइगविन का उपयोग करते समय, यदि आप mingw कंपाइलर (x86_64-w64-mingw32-gcc) का उपयोग नहीं करते हैं, तो आप cygwin1.dll पर निर्भरता के साथ समाप्त हो जाएंगे।

अंत में, यदि आप एक से अधिक कंपाइलर का उपयोग करते हैं, तो सुनिश्चित करें कि सभी कंपाइलर झंडे समान हैं (समान कार्य कॉलिंग सम्मेलन, एबीआई, आदि)। इसके अलावा, मैथवर्क्स ने मैक्स बिल्ड प्रक्रिया को बदल दिया है। हाल ही में एक परियोजना में, मैं से

सी अपने स्थानीय निर्देशिका के लिए mexconfig.xml की नकल की: \ Users \ MyUser \ AppData \ रोमिंग \ MathWorks \ MATLAB \ R2016a \ mex_C_win64.xml

और संपादित तो जैसे संकलक झंडे :

COMPFLAGS="/Zp8 /GR /W3 /EHs /nologo /MD /Gz /TC" 

यदि आप कस्टम बिल्ड फ़ाइल का उपयोग करते हैं, तो -f विकल्प का उपयोग करें।

mex mxCustom.c custom.lib -f mexconfig.xml