2013-04-22 3 views
1

Я использую MATLAB под Ubuntu и собрать набор из 2 C++ файлов с заголовочным файлом, используя MEX. Я показываю основной пример и ошибки, которые я получаю.ошибки, пытаясь скомпилировать несколько C++ файлов с Mex для MATLAB

Этот код создает текст «привет» из функции с ++, которая начинается с mexFunction и компилируется в среде MATLAB с использованием MEX, (MEX mexTryAlex.cpp):

#include <mex.h> 
#include <iostream> 
using namespace std; 

void newfunc(){ 
    cout<<"hello\n"; 
} 
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) 
{ 
    newfunc(); 
} 

и он работает нормально. Теперь я пытаюсь использовать несколько файлов и файл заголовка с mex. Я создаю файл заголовка try.h:

#ifndef try_h 
#define try_h 
void newfunc(); 
#endif 

, а затем файл новой функции в try.cpp:

#include <mex.h> 
#include <iostream> 
#include <try.h> 
using namespace std; 

void newfunc(){ 
    cout<<"hello\n"; 
} 

Эти 3 файла не компилировать с mex:

>> mex mexTryAlex.cpp try.cpp try.h 

Warning: You are using gcc version "4.4.3-4ubuntu5)". The version 
    currently supported with MEX is "4.3.4". 
    For a list of currently supported compilers see: 
    http://www.mathworks.com/support/compilers/current_release/ 

try.cpp:4:17: error: try.h: No such file or directory 
mex: compile of ' "try.cpp"' failed. 
??? Error using ==> mex at 208 
Unable to complete successfully. 

Еще одна попытка с помощью -I опция:

>> mex -I mexTryAlex.cpp try.cpp try.h 
Warning: You are using gcc version "4.4.3-4ubuntu5)". The version 
    currently supported with MEX is "4.3.4". 
    For a list of currently supported compilers see: 
    http://www.mathworks.com/support/compilers/current_release/ 

mexTryAlex.cpp:1:17: error: mex.h: No such file or directory 
mexTryAlex.cpp:7: error: ‘mxArray’ has not been declared 
mexTryAlex.cpp:7: error: ISO C++ forbids declaration of ‘mxArray’ with no type 
mexTryAlex.cpp:7: error: expected ‘,’ or ‘...’ before ‘*’ token 
mex: compile of ' "mexTryAlex.cpp"' failed. 
??? Error using ==> mex at 208 
Unable to complete successfully. 

Как я могу получить эти файлы для компиляции?

+1

Просто общий совет: 'using namespace std;' не лучший из идей. Просто используйте 'std :: cout', или если вы используете' cout' много и хотите его сократить, используйте 'using std :: cout;', но открытие *** полного пространства имен std *** даст вам головные боли в конечном итоге :) Просто посмотрите здесь, на SO за плюсы/минусы/дискуссии по этой теме. –

ответ

1

Была исправлена ​​ошибка при использовании

#include "try.h" 

вместо

#include <try.h> 

в исходных файлах.

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