2012-01-08 4 views
0

У меня возникли проблемы с записью файла MEX в MATLAB, который может выполнять простую линейную операцию, например, принимать обратную матрицу. Я успешно удалил обратную матрицу с помощью Visual Studio 2010 и успешно создал MEX-файл, поэтому единственное, что у меня возникает, - это совместное использование этих двух понятий. Я попытался скомпилировать код примера MEX, который я получил с сайта MathWorks, но не повезло.Как использовать CLAPACK, BLAS или LAPACK в файле mex?

Вот что я пытался,

  1. Сохраненный файл (переименованный его) я получил от MathWorks как .c расширение, а затем пытался скомпилировать его в MATLAB получил:

    Создание библиотека C: \ Users \ CIT \ AppData \ Local \ Temp \ mex_bKHjrl \ templib.x и объект C: \ Users \ CIT \ AppData \ Local \ Temp \ mex_bKHjrl \ templib.exp eko1.obj: ошибка LNK2019: нерешенный внешний символ dgesv ссылается в функции mexFunction eko1.mexw64: фатальная ошибка LNK1120: 1 неразрешенные внешние

  2. Также я пытался скомпилировать его как .c файла произошла однако ошибка, потому что оно не признает функцию тетсра.

  3. Поскольку это не работает, я написал свою собственную программу, которая использовала подпрограммы dgetrf и dgetri из библиотеки LAPACK произошедшей однако ошибка:

    C: \ Users \ соч \ документы \ MatLab \ f2c .h (16): ошибка C2371: 'complex': redefinition; различные базовые типы C: \ Program Files \ MATLAB \ R2011b \ extern \ include \ lapack.h (39): см. объявление 'complex' c: \ users \ cit \ documents \ matlab \ f2c.h (17) : ошибка C2371: «doublecomplex»: переопределение; различные базовые типы C: \ Program Files \ MATLAB \ R2011b \ extern \ include \ lapack.h (40): см. объявление doublecomplex eko2.cpp (29): ошибка C2057: ожидаемое постоянное выражение eko2.cpp (29): ошибка C2466: не может выделить массив постоянного размера 0 eko2.cpp (29): ошибка C2133: 'ipiv': неизвестный размер eko2.cpp (33): ошибка C2664: 'dgetrf': не может преобразовать параметр 1 от 'integer *' до 'ptrdiff_t *' Указанные типы не связаны; для преобразования требуется reinterpret_cast, литье в стиле C или литье в стиле функции eko2.cpp (34): ошибка C2664: 'dgetri': невозможно преобразовать параметр 1 из 'integer *' в 'ptrdiff_t *' Указанные типы не связаны; преобразование требует reinterpret_cast, в стиле С литой или функция стиля бросание

Любая помощь вы, ребята, дайте мне бы очень оценили

Спасибо заранее.

ответ

0

Без какого-либо кода, чтобы узнать, что вы пробовали, трудно сказать, но ... чтобы правильно скомпилировать mex-файл в matlab, который зависит от других библиотек, вам нужно указать эти библиотеки в команде компиляции , Используйте mex filename.c -v -l*libraryname*.lib. Переключатель -l указывает компилятору, что вы указываете библиотеку, которую хотите включить. Если эта библиотека не найдена, я бы включил полный путь к библиотеке в команде. Надеюсь, это поможет вам. Использование этой методологии было успешным для меня.

 Смежные вопросы

  • Нет связанных вопросов^_^