我创建了一个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
我该怎么做才能解决它?
其他信息
在Matlab和.bash_profile
中设置环境变量(PATH,LD_LIBRARY_PATH,DYLD_LIBRARY_PATH)对我不起作用
我非常确定环境变量设置正确,因为当我创建dylib
文件的别名时,Matlab检测到它,尝试加载它,但失败并显示消息:{ {1}}
谢谢!
答案 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
。