2012-02-02 3 views
0

Мне нужно скомпилировать mex-файл, который написан на C++ (VS 2008) с Matlab 2009. Если я скомпилирую VS VS напрямую, кажется, что Matlab несовместим и погрешность составляет:Компиляция mex-файлов с C++ через matlab: файлы заголовков недоступны

//Invalid MEX-file

Поэтому я попытался скомпилировать Matlab напрямую, используя функцию MEX. В «MEX -setup» Я выбрал

//Lcc-win32 C 2.4.1 in C:\PROGRA~1\MATLAB\R2009a\sys\lcc

компилировать с Matlab, но это только скомпилировать C, а не C++ и мои коды в C++. Тогда я выбрал

//Microsoft Visual C++ 2008 SP1 in C:\Programme\Microsoft Visual Studio 9.0

компилировать с VS 2008 с Matlab. Для простого тестового файла C++ он работал. Файл mex был идеальным. Затем я добавил некоторые файлы заголовков и функцию для вызова класса в одном из файлов заголовков. Я добавил заголовочные файлы «Aria» в свой проект, и появилась вышеприведенная ошибка.

//Aria website where you can find header files: (http://robots.mobilerobots.com/wiki/ARIA)

Файлы заголовков находятся в том же каталоге, что и основная программа, все файлы lib определены в проекте VC++. В «Дополнительные библиотечные каталоги» я снова добавил их путь. Когда я создаю свой проект через VC++, ошибки нет. Но когда я пытаюсь использовать MEX из Matlab, эта ошибка возникает. (Название файла C++ является «тест»)

// Microsoft (R) Incremental Linker Version 9.00.21022.08

Copyright (C) Microsoft Corporation. All rights reserved.

...

test.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: static void _cdecl Aria::init(enum Aria::SigHandleMethod,bool,bool)" ([email protected]@@[email protected]@[email protected]) referenced in function _main test.mexw32 : fatal error LNK1120: 1 unresolved externals

C:\PROGRA~1\MATLAB\R2009A\BIN\MEX.PL: Error: Link of 'test.mexw32' failed.

??? Error using ==> mex at 218 Unable to complete successfully. //

Для тестирования проекта, я написал небольшой класс в одном из того, что файлы заголовков и использовать этот класс в C++ файл, и это сработало! Я не знаю, почему другие классы не работают. Они связаны друг с другом, и они составляют около 140 .h файлов.

Есть ли у кого-нибудь идеи, почему это происходит? Почему нет ошибки при создании, выпуске и отладке проекта в VC++, но когда я пытаюсь скомпилировать MEX-файл с Matlab, эта ошибка?

ответ

0

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

// MEX name.cpp name.h name.lib

Здесь winmm.lib, WSock32.Lib и AdvAPI32.Lib.

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