|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Mar 2009
Messaggi: 753
|
[C++ - MATLAB 7.7] Simboli delle funzioni matlab non risolti
Piccola delucidazione su matlab....
vorrei visualizzare dei grafici con matlab chiamando le funzioni dal codice C++. lo faccio ad esempio così: Utilizzo Visual studio 2008, e matlab 7.7. Win 7 64 bit. Codice:
#ifdef _MATLAB_ float result_array[EPOCHS]; float des_result_array[EPOCHS]; Engine *ep; ep = engOpen(NULL); mxArray *data_ml; #endif Nella cartella di matlab, esattamente in ../extern/lib/... ci sono tre versioni (a quanto ho capito) di librerie, sembra che nessuna di queste vada bene per il mio sistema... cercando su intenret non è che ho capito molto di più... ![]() Vi ringrazio per qualsiasi suggerimento. ![]() |
![]() |
![]() |
![]() |
#2 | |
Senior Member
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
|
Quote:
Se non ricordo male l'interfaccia di Matlab e' per il C non il C++, quindi magari e' solo questione di qualche extern "C"
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele |
|
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Mar 2009
Messaggi: 753
|
sono i seguenti (non le ho definite), ovvero tutte le funzioni di matlab che utilizzo:
Il linker aggiunge un "_" davanti: _engPutVariable _mxGetPr _mxCreateDoubleMatrix_730 _engOpen le segnalo così, ma ho anche provato a metterle nelle opzioni del progetto.. Codice:
// MATLAB #ifdef _MATLAB_ #include "C:/Program Files/MATLAB/R2008b/extern/include/engine.h" #include "C:/Program Files/MATLAB/R2008b/extern/include/matrix.h" #pragma comment(lib,"libmx.lib") #pragma comment(lib,"libmex.lib") #pragma comment(lib,"libmat.lib") #pragma comment(lib,"libeng.lib") #endif |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Mar 2009
Messaggi: 753
|
Semplice,
il motivo è molto probabilmente perchè Matlab 7.7 non supporta windows 7 64 bit. http://www.mathworks.com/support/sys..._releases.html |
![]() |
![]() |
![]() |
#5 | |
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
Quote:
Sembrerebbe semplicemente cha la convenzione di chiamata non sia quella corretta. Cosa dice il manuale?
__________________
In God we trust; all others bring data |
|
![]() |
![]() |
![]() |
#6 | |
Senior Member
Iscritto dal: Mar 2009
Messaggi: 753
|
Quote:
Io non sono pratico di MatLab. E' anche probabile che sbaglio qualcosa. Codice:
nn_main_sum.obj : error LNK2019: riferimento al simbolo esterno _engPutVariable non risolto nella funzione "int __cdecl t_main(int,char const * *)" (?t_main@@YAHHPAPBD@Z) 1>nn_main_sum.obj : error LNK2019: riferimento al simbolo esterno _mxGetPr non risolto nella funzione "int __cdecl t_main(int,char const * *)" (?t_main@@YAHHPAPBD@Z) 1>nn_main_sum.obj : error LNK2019: riferimento al simbolo esterno _mxCreateDoubleMatrix_730 non risolto nella funzione "int __cdecl t_main(int,char const * *)" (?t_main@@YAHHPAPBD@Z) 1>nn_main_sum.obj : error LNK2019: riferimento al simbolo esterno _engOpen non risolto nella funzione "int __cdecl t_main(int,char const * *)" (?t_main@@YAHHPAPBD@Z) 1>MSVCRTD.lib(crtexe.obj) : error LNK2019: riferimento al simbolo esterno _main non risolto nella funzione ___tmainCRTStartup L'help di Matlab riporta vari esempi, e chiama le funzione nel modo che ho utilizzato anche io. Ad esempio nel manuale trovo: Have: C/C++ code Want: Create stand-alone link to MATLAB routines Why: Don't want to code these routines, since they are already available Need: [C/C++ Math Library], C/C++ compiler (to compile C code) Don't need: MATLAB, MATLAB Compiler Have: C/C++ code Want: Live link to a MATLAB session and routines Why: Use MATLAB as a Computational Engine Need: MATLAB, C/C++ compiler Don't need: MATLAB Compiler, [C/C++ Math Library] Io credo di aver fatto come nel secondo caso, ovvero utilizzo la chiamata engOpen(). Che cosa ne pensi? Grazie. |
|
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
Quote:
![]() Sembra davvero che ci siano problemi nella convenzione delle chiamata. Se e' davvero cosi', il problema e' risolvibile. Ho visto che linki dei .lib. Questi contengono la libreria "completa" o fanno poi riferimento a delle dll? A proposito, sto dando per scontato che stai usando Visual Studio.... Prova a guardare http://social.msdn.microsoft.com/for...a-66341803ad4a probabilmente si applica al tuo caso
__________________
In God we trust; all others bring data |
|
![]() |
![]() |
![]() |
#8 | |
Senior Member
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
|
Quote:
E il compilatore ? E' a 32 o a 64
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele |
|
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Mar 2009
Messaggi: 753
|
allora dovrebbe essere tutto a 32 bit a parte il mio sistema.
Ho però il dubbio su matlab, perchè non è sotto "programmi(x86)" ma sotto "programmi" ovvero dove vanno solitamente i programmi a 64 bit. ho guardato anche l'articolo, ma non ho risolto ponendo le chiamate con __cdecl davanti... sembra che io linki le librerie sbagliate. In effetti nella cartelle extern/lib/Win32/microsoft di Matlab ci sono appena 3 librerie.... che non sono quelle che ho linkato... quelle che ho linkato sono sotto win64/microsoft... potrebbe essere questo il punto? Perdonatemi sono 2 giorni che l'ho installato ![]() |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 22:53.