Matlab:无法加载无效的mex文件库

时间:2014-05-01 07:17:52

标签: matlab mex dylib rpath

我创建了一个mex函数(更具体地说,使用CUDA)

编译成功了,我收到了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. 在Matlab和.bash_profile中设置环境变量(PATH,LD_LIBRARY_PATH,DYLD_LIBRARY_PATH)对我不起作用

  2. 我非常确定环境变量设置正确,因为当我创建dylib文件的别名时,Matlab检测到它,尝试加载它,但失败并显示消息:{ {1}}

  3. 谢谢!

2 个答案:

答案 0 :(得分: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++"

答案 1 :(得分:0)

这篇文章可能有所帮助:http://www.seaandsailor.com/matlab-xcode6.html

这比我想象的容易。只需将所有10.x替换为您的OS X版本,并将-Dchar16_t=UINT16_T添加到CLIBS文件中的mexopts.sh