2014-05-01 38 views
0

我創建了一個MEX功能(更具體地說,使用CUDA)Matlab的:無效MEX文件庫沒有加載

編譯成功,我獲得了mex文件zMul.mexmaci64

,但在執行,MATLAB報告了一個錯誤:

Invalid MEX-file '/Users/zlw/Documents/MATLAB/lowComplexity/cbased/matMulGPU/zMul.mexmaci64': 
dlopen(/Users/zlw/Documents/MATLAB/lowComplexity/cbased/matMulGPU/zMul.mexmaci64, 1): 
Library not loaded: @rpath/libcublas.6.0.dylib 
Referenced from: /Users/zlw/Documents/MATLAB/lowComplexity/cbased/matMulGPU/zMul.mexmaci64 
Reason: image not found 

我該怎麼辦才能解決它?

其他信息

  1. 設置環境瓦爾(PATH,LD_LIBRARY_PATH,DYLD_LIBRARY_PATH)在Matlab和.bash_profile不爲我

  2. 我敢肯定的環境中工作變量設置正確,因爲當我創建了dylib文件的別名時,Matlab檢測到它,試圖加載它,但失敗並顯示消息:no suitable image found

謝謝!

回答

2

在Matlab和UNIX控制檯中均使用otool -L

在Matlab中:

!otool -L /path/to/zMul.mexmaci64 

在UNIX控制檯:

otool -L /path/to/zMul.mexmaci64 

試圖找到它們之間的區別。如果依賴關係存在差異,那很可能會破壞MEX二進制。您可能需要遞歸地對相關的dylib對象應用相同的技術。通常,使用DYLD_INSERT_LIBRARIES強制執行在UNIX控制檯中出現的問題可以解決問題。

另一種可能性是C++運行時兼容性。如果您使用的是OS X Mavericks,則應檢查您的MEX命令是否使用libc++而不是libstdc++mexopts.sh。下面是我的mexopts.sh配置示例:

CC='clang' 
CXX='clang++' 
SDKROOT='/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/' 
MACOSX_DEPLOYMENT_TARGET='10.9' 
CFLAGS="$CFLAGS -Dchar16_t=uint16_t" 
CXXFLAGS="$CXXFLAGS -std=c++11 -stdlib=libc++ -DCHAR16_T" 
CXXLIBS="$MLIBS -lc++"