Компиляция mex файлов с C ++ через matlab: файлы заголовков недоступны - PullRequest
0 голосов
/ 02 февраля 2012

Мне нужно скомпилировать 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 эта ошибка?

1 Ответ

0 голосов
/ 06 февраля 2012

Все файлы заголовков и необходимые библиотеки должны быть скомпилированы.

// mex name.cpp name.h name.lib

Здесь WinMM.Lib, WSock32.Lib и AdvAPI32.Lib.

...