Мне нужно скомпилировать mex-файл, написанный на C ++ (VS 2008) с Matlab 2009. Если я скомпилирую с VS 2008 напрямую, кажется, что Matlab несовместим, и ошибка:
// Неверный MEX-файл
Поэтому я попытался скомпилировать Matlab напрямую, используя функцию MEX.В "mex-setup" я выбрал
// Lcc-win32 C 2.4.1 в C: \ PROGRA ~ 1 \ MATLAB \ R2009a \ sys \ lcc
компилировать с Matlab, но он компилирует только C, а не C ++, и мои коды находятся на C ++.Затем я выбрал
// Microsoft Visual C ++ 2008 SP1 в C: \ Program \ Microsoft Visual Studio 9.0
для компиляции с VS 2008 из Matlab.Для простого тестового файла C ++ это сработало.Мекс файл был идеальным.Затем я добавил несколько файлов заголовков и функцию для вызова класса в одном из файлов заголовков.Я добавил заголовочные файлы «Aria» в свой проект, и появилась вышеуказанная ошибка.
// Веб-сайт Aria, где вы можете найти заголовочные файлы: (http://robots.mobilerobots.com/wiki/ARIA)
Headerфайлы находятся в том же каталоге, что и основная программа, все файлы lib определены в проекте VC ++. В «Дополнительные каталоги библиотек» я снова добавил их путь. Когда я строю свой проект через VC ++, ошибки нет. Но когда я пытаюсьиспользуйте MEX из Matlab, эта ошибка возникает (имя файла C ++ - «test»)
// Microsoft (R) Incremental Linker Version 9.00.21022.08
Copyright (C)) Корпорация Microsoft. Все права защищены.
...
test.obj: ошибка LNK2019: неразрешенный внешний символ "__declspec (dllimport) public: static void _ cdecl Aria ::init (enum Aria :: SigHandleMethod, bool, bool) "( _imp_? init @ Aria @@ SAXW4SigHandleMethod @ 1 @ _N1 @ Z) ссылка на функцию _main test.mexw32: фатальная ошибка LNK1120: 1 неразрешенная внешняя часть
C: \ PROGRA ~ 1 \ MATLAB \ R2009A \ BIN \ MEX.PL: Ошибка: не удалось установить ссылку на test.mexw32.
???Ошибка при использовании ==> mex на 218 Невозможно завершить успешно.//
Чтобы протестировать проект, я написал небольшой класс в одном из этих заголовочных файлов и использовал этот класс в файле C ++, и это сработало!Я не знаю, почему другие классы не работают.Они связаны друг с другом и составляют около 140 .h файлов.
Кто-нибудь знает, почему это происходит?Почему нет ошибки при сборке, выпуске и отладке проекта в VC ++, но при попытке скомпилировать MEX-файл с помощью Matlab эта ошибка?