0

I have created a mex function (more specifically, using CUDA)

the compilation was successful, and I got a mex file zMul.mexmaci64

but on the execution, matlab reported an error:

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

What should I do do solve it?

additional info

  1. setting the environment vars (PATH,LD_LIBRARY_PATH,DYLD_LIBRARY_PATH) in Matlab and in .bash_profile doesn't work for me

  2. I'm pretty sure that the environment vars are set correctly because when I created an alias to the dylib file, Matlab detected it, tried to load it, but failed with message:no suitable image found

Thanks!

4

2 回答 2

2

otool -L在 Matlab 和 UNIX 控制台中使用。

在 Matlab 中:

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

在 UNIX 控制台中:

otool -L /path/to/zMul.mexmaci64

尝试找出它们之间的区别。如果依赖性存在差异,则可能会破坏 MEX 二进制文件。您可能需要对依赖的 dylib 对象递归地应用相同的技术。通常,强制使用出现在 UNIX 控制台中DYLD_INSERT_LIBRARIES的那个可以解决问题。

另一种可能性是 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++"
于 2014-05-01T15:06:21.507 回答
0

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

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

于 2015-01-09T15:52:20.533 回答