Я пытаюсь создать mex-функцию в MATLAB. Функция зависит от библиотеки C++. Тем не менее, я получаю нерешенную внешность в MATLAB, независимо от того, что я делаю. Я создал три тривиальные файлы для демонстрации проблемы:Mex функционирует нерешенным внешним
my_test123.h
_declspec(dllexport) void my_test();
my_test.cpp
extern "C" {
#include "my_test123.h"
}
void my_test() {
}
компилировать и связать эти два файла выше, используя команду :
cl /LD /Femy_test.dll my_test.cpp
Это генерирует два файла: my_test.lib и my_test.dll.
Третий файл является тривиальным mexfunction:
my_mex.cpp
#include "mex.h"
extern "C" {
void my_test();
}
/* The gateway function */
void mexFunction(int nlhs, mxArray *plhs[],
int nrhs, const mxArray *prhs[])
{
my_test();
}
В MATLAB, я использую следующую команду:
mex -v my_mex.cpp my_test.lib
Я также попытался:
mex -v my_mex.cpp -lmy_test.lib
Все файлы находятся в том же каталоге, и команда mex находит файл .lib (если я пытаюсь использовать случайное имя вместо my_test.lib, я получаю файл, который не найден ошибкой).
Ошибки я получаю:
Ошибка с помощью Mex Создание библиотеки my_mex.lib и объект my_mex.exp my_mex.obj: ошибка LNK2019: неразрешенный внешний символ my_test ссылки в функции mexFunction my_mex.mexw64 : фатальная ошибка LNK1120: 1 неразрешенных внешнего
Я также попытался сделать каждый файл в C-файл (удаление экстернов и меняющееся расширение mexfunciton на .c) и компиляцию в C. Но я точно такую же ошибку.
Я использую Visual Studio 2013 и 64-разрядную версию MATLAB 2014b.
Любая помощь очень ценится.