Matlab: недопустимая библиотека файлов mex не загружена

Я создал функцию 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. установка переменных среды (PATH, LD_LIBRARY_PATH, DYLD_LIBRARY_PATH) в Matlab и в .bash_profile у меня не работает

  2. Я почти уверен, что переменные среды установлены правильно, потому что, когда я создал псевдоним для файла dylib, Matlab обнаружил его, попытался загрузить, но не смог с сообщением: no suitable image found

Спасибо!


person Lewen    schedule 01.05.2014    source источник


Ответы (2)


Используйте otool -L как в консоли Matlab, так и в консоли UNIX.

В Матлабе:

!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++"
person kyamagu    schedule 01.05.2014

Этот пост может помочь: http://www.seaandsailor.com/matlab-xcode6.html

Это было проще, чем я думал. Просто замените все 10.x своей версией OS X и добавьте -Dchar16_t=UINT16_T к CLIBS в файле mexopts.sh.

person Palli    schedule 09.01.2015