我一直在試圖讓我的頭周圍的一些錯誤,編譯C編寫的MATLAB功能(在Mac OS X),當我得到。函數msound由我的大學爲Windows和Linux預編譯,並且是有關錄製和播放音頻的其他功能的基礎。由於我是Mac用戶,我認爲將其編譯爲Mac版本也是非常合適的。MATLAB:缺少對MEX編譯框架 - 未定義的符號體系結構x86_64的
從源代碼和Linux版的編譯器的功能我想的編譯器指令反向工程一個Mac版本,但我不斷收到導致一個失敗的編譯錯誤。這裏是我放在一起作爲編譯器的功能至今:
function compile_msound_unix
disp('Building msound ...')
szOptions = '';
szDefines = '';
szPaths = '';
szFiles = '';
szLibs = '';
szOptions = sprintf('%s %s', szOptions, '-output msound' );
szOptions = sprintf('%s %s', szOptions, '-largeArrayDims' );
% Add main file.
szFiles = addFile(szFiles, 'msound.c');
% Add basic PortAudio include paths and files.
szPaths = addPath(szPaths, 'portaudio/include' );
szPaths = addPath(szPaths, 'portaudio/src/common' );
szPaths = addPath(szPaths, 'portaudio/src/os/unix' );
szFiles = addFile(szFiles, 'portaudio/src/common/pa_allocation.c' );
szFiles = addFile(szFiles, 'portaudio/src/common/pa_converters.c' );
szFiles = addFile(szFiles, 'portaudio/src/common/pa_cpuload.c' );
szFiles = addFile(szFiles, 'portaudio/src/common/pa_debugprint.c' );
szFiles = addFile(szFiles, 'portaudio/src/common/pa_dither.c' );
szFiles = addFile(szFiles, 'portaudio/src/common/pa_front.c' );
szFiles = addFile(szFiles, 'portaudio/src/common/pa_process.c' );
szFiles = addFile(szFiles, 'portaudio/src/common/pa_ringbuffer.c' );
szFiles = addFile(szFiles, 'portaudio/src/common/pa_skeleton.c' );
szFiles = addFile(szFiles, 'portaudio/src/common/pa_stream.c' );
szFiles = addFile(szFiles, 'portaudio/src/common/pa_trace.c' );
% Host
szFiles = addFile(szFiles, 'portaudio/src/os/unix/pa_unix_hostapis.c' );
szFiles = addFile(szFiles, 'portaudio/src/os/unix/pa_unix_util.c' );
% Add PortAudio path for: Apple Core Audio API
disp(' Using ''Apple Core Audio API'' ...')
% Defines
szDefines = addDefine(szDefines, 'PA_USE_COREAUDIO');
szDefines = addDefine(szDefines, '__MACOSX_CORE__');
% PortAudio
szPaths = addPath(szPaths, 'portaudio/src/hostapi/coreaudio');
szFiles = addFile(szFiles, 'portaudio/src/hostapi/coreaudio/pa_mac_core_blocking.c');
szFiles = addFile(szFiles, 'portaudio/src/hostapi/coreaudio/pa_mac_core_utilities.c');
szFiles = addFile(szFiles, 'portaudio/src/hostapi/coreaudio/pa_mac_core.c');
% Libs
% szLibs = addLib (szLibs , '/full/path/to/library?');
% Build msound MEX-file using default compiler.
eval([ 'mex', szOptions, szDefines, szPaths, szFiles, szLibs ]);
function szCmd = addFile (szCmd, szFile)
szCmd = sprintf('%s "%s"' , szCmd, szFile);
function szCmd = addPath (szCmd, szPath)
szCmd = sprintf('%s "-I%s"', szCmd, szPath);
function szCmd = addDefine(szCmd, szName)
szCmd = sprintf('%s "-D%s"', szCmd, szName);
function szCmd = addLib (szCmd, szLib )
szCmd = sprintf('%s "-l%s"', szCmd, szLib );
function szCmd = addLibPath(szCmd, szPath)
szCmd = sprintf('%s "-L%s"', szCmd, szPath)
我已經消除了其他一些錯誤,但現在我只能堅持以下MATLAB控制檯輸出:
Building msound ...
Using 'Apple Core Audio API' ...
msound.c: In function 'msoundDeviceInfo':
msound.c:3042: warning: initialization makes pointer from integer without a cast
msound.c:3044: warning: initialization makes pointer from integer without a cast
msound.c:3046: warning: initialization makes pointer from integer without a cast
msound.c:3048: warning: initialization makes pointer from integer without a cast
portaudio/src/hostapi/coreaudio/pa_mac_core.c: In function 'AudioIOProc':
portaudio/src/hostapi/coreaudio/pa_mac_core.c:1911: warning: 'AudioConverterFillBuffer' is deprecated (declared at /Developer/SDKs/MacOSX10.6.sdk/System/Library/Frameworks/AudioToolbox.framework/Headers/AudioConverter.h:641)
portaudio/src/hostapi/coreaudio/pa_mac_core.c:2080: warning: 'AudioConverterFillBuffer' is deprecated (declared at /Developer/SDKs/MacOSX10.6.sdk/System/Library/Frameworks/AudioToolbox.framework/Headers/AudioConverter.h:641)
Undefined symbols for architecture x86_64:
"_mxCreateScalarDouble", referenced from:
_msoundDeviceInfo in msound.o
"_AudioDeviceSetProperty", referenced from:
_setBestFramesPerBuffer in pa_mac_core_utilities.o
_AudioDeviceSetPropertyNowAndWaitForChange in pa_mac_core_utilities.o
(maybe you meant: _AudioDeviceSetPropertyNowAndWaitForChange)
"_AudioDeviceGetProperty", referenced from:
_setBestFramesPerBuffer in pa_mac_core_utilities.o
_AudioDeviceSetPropertyNowAndWaitForChange in pa_mac_core_utilities.o
_setBestSampleRateForDevice in pa_mac_core_utilities.o
_GetChannelInfo in pa_mac_core.o
_PaMacCore_Initialize in pa_mac_core.o
_OpenStream in pa_mac_core.o
_PaMacCore_GetChannelName in pa_mac_core.o
...
"_AudioDeviceGetPropertyInfo", referenced from:
_setBestFramesPerBuffer in pa_mac_core_utilities.o
_setBestSampleRateForDevice in pa_mac_core_utilities.o
_GetChannelInfo in pa_mac_core.o
_PaMacCore_Initialize in pa_mac_core.o
_PaMacCore_GetChannelName in pa_mac_core.o
"_AudioDeviceAddPropertyListener", referenced from:
_AudioDeviceSetPropertyNowAndWaitForChange in pa_mac_core_utilities.o
_OpenAndSetupOneAudioUnit in pa_mac_core.o
"_AudioDeviceRemovePropertyListener", referenced from:
_AudioDeviceSetPropertyNowAndWaitForChange in pa_mac_core_utilities.o
_CloseStream in pa_mac_core.o
"_AudioHardwareGetPropertyInfo", referenced from:
_PaMacCore_Initialize in pa_mac_core.o
"_AudioHardwareGetProperty", referenced from:
_PaMacCore_Initialize in pa_mac_core.o
"_AudioUnitUninitialize", referenced from:
_CloseStream in pa_mac_core.o
"_CloseComponent", referenced from:
_CloseStream in pa_mac_core.o
_OpenAndSetupOneAudioUnit in pa_mac_core.o
"_AudioConverterDispose", referenced from:
_CloseStream in pa_mac_core.o
"_AudioConverterReset", referenced from:
_StartStream in pa_mac_core.o
"_AudioOutputUnitStart", referenced from:
_StartStream in pa_mac_core.o
"_AudioOutputUnitStop", referenced from:
_StopStream in pa_mac_core.o
_AudioIOProc in pa_mac_core.o
"_AudioUnitGetProperty", referenced from:
_StopStream in pa_mac_core.o
_startStopCallback in pa_mac_core.o
_OpenAndSetupOneAudioUnit in pa_mac_core.o
"_AudioUnitReset", referenced from:
_StopStream in pa_mac_core.o
"_AudioDeviceGetCurrentTime", referenced from:
_GetStreamTime in pa_mac_core.o
_AudioIOProc in pa_mac_core.o
"_FindNextComponent", referenced from:
_OpenAndSetupOneAudioUnit in pa_mac_core.o
"_OpenAComponent", referenced from:
_OpenAndSetupOneAudioUnit in pa_mac_core.o
"_AudioUnitSetProperty", referenced from:
_OpenAndSetupOneAudioUnit in pa_mac_core.o
"_AudioUnitAddPropertyListener", referenced from:
_OpenAndSetupOneAudioUnit in pa_mac_core.o
"_AudioConverterNew", referenced from:
_OpenAndSetupOneAudioUnit in pa_mac_core.o
"_AudioConverterSetProperty", referenced from:
_OpenAndSetupOneAudioUnit in pa_mac_core.o
"_AudioUnitInitialize", referenced from:
_OpenAndSetupOneAudioUnit in pa_mac_core.o
"_AudioUnitRender", referenced from:
_AudioIOProc in pa_mac_core.o
"_AudioConverterFillBuffer", referenced from:
_AudioIOProc in pa_mac_core.o
"_CFStringCreateWithFormat", referenced from:
_PaMacCore_GetChannelName in pa_mac_core.o
"_CFStringGetLength", referenced from:
_PaMacCore_GetChannelName in pa_mac_core.o
"_CFStringGetCString", referenced from:
_PaMacCore_GetChannelName in pa_mac_core.o
"_CFRelease", referenced from:
_PaMacCore_GetChannelName in pa_mac_core.o
"___CFConstantStringClassReference", referenced from:
CFString in pa_mac_core.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
mex: link of ' "msound.mexmaci64"' failed.
??? Error using ==> mex at 208
Unable to complete successfully.
Error in ==> compile_msound_unix at 51
eval([ 'mex', szOptions, szDefines, szPaths, szFiles, szLibs ]);
的主要問題似乎是Undefined symbols for architecture x86_64
。我做了一些研究,現在我知道一些框架可能會丟失。但我對這種編程非常陌生(並且在Mac上編譯),我可以使用一些幫助。
我嘗試編譯功能是基於支持在Mac上的CoreAudio的音頻PortAudio-I/O。正如你在我的編譯器函數中看到的,我已經包含了必要的PortAudio文件,但是我仍然缺少相應的庫/框架。我已經試圖爲他們提供如下線路:
szLibs = addLib (szLibs , '/System/Library/Frameworks/CoreAudio.framework');
但是沒有任何成功。我真的希望你們有想法如何讓這個運行。我正在使用Mac OS X 10.7.3 Lion,我安裝了Xcode並正在運行gcc-4.2。 MATLAB版本是2011A(v7.12)
在此先感謝1月
所以我繼續在解決問題並固定在行3042,3044,3046和3048的警告:他們被創建'mxCreateScalarDouble'被MATLAB 6.5中的'mxCreateDoubleScalar'函數替代,並且在我的版本中已被刪除。所以這一切都消失了,同時還有第一個缺失的符號,這是由前面提到的'mxCreateDoubleScalar'替換引起的。 – 2012-04-01 14:22:05