2014-05-01 33 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++"