Как я могу использовать CLAPACK, BLAS или LAPACK в mex-файле? - PullRequest
0 голосов
/ 08 января 2012

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

Вот что я попробовал,

  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. Также я попытался скомпилировать ее как .cppОднако в файле произошла ошибка, так как он не распознал функцию memcpy.

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

    c: \ users \ cit \ documents \ matlab \ f2c.h (16): ошибка C2371: «сложный»: переопределение;различные базовые типы C: \ Program Files \ MATLAB \ R2011b \ extern \ include \ lapack.h (39): см. объявление «сложного» c: \ users \ cit \ documents \ matlab \ f2c.h (17): ошибка C2371: «двойной комплекс»: переопределение;различные базовые типы 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 из «целого числа *»to 'ptrdiff_t *' Типы, на которые указывают, не связаны;преобразование требует reinterpret_cast, приведение в стиле C или приведение в функциональном стиле eko2.cpp (34): ошибка C2664: 'dgetri': невозможно преобразовать параметр 1 из 'integer *' в 'ptrdiff_t *' Типы, на которые указывают, не связаны;преобразование требует reinterpret_cast, приведения в стиле C или приведения в функциональном стиле

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

Заранее спасибо.

1 Ответ

0 голосов
/ 24 июня 2012

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

...