Bonsoir,

J'essaie depuis plusieurs jours d'utiliser dans un programme en C une librairie Matlab compilée avec mcc.

J'ai écrit une fonction test.m et créé ma librairie avec la commande mcc -l test.m

J'ai fait un programme C (avec Dev c++), configuré tout le bazar pour que le compilateur aille chercher les fichiers du MCR (Matlab Component Runtime) et ajouté ma librairie au programme (test.lib dans l'éditeur de liens, test.h au début du programme)

Je parviens à compiler sans erreur*, mais le programme plante sans prévenir pendant l'exécution.
D'après l'aide Matlab, il faut respecter les différentes étapes:
1) Appeler mclInitializeApplication()
2) Appeler <libraryname>Initialize(), donc testInitialize() dans mon cas
3) Ensuite on peut utiliser la fonction mlfTest() qui correspond à la fonction test() écrite dans Matlab
4) Appeler <libraryname>Terminate(), donc testTerminate() dans mon cas
5) Appeler mclTerminateApplication()

Chez moi ça plante dès testInitialize(), le programme se ferme immédiatement. Par contre mclInitializeApplication() fonctionne et retourne 1.

Les codes Matlab et C, plus simple tu meurs:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
function test()
a = 1;
end
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
#include <stdio.h>
#include <stdlib.h>
#include "test.h"
 
int main(int argc, char *argv[])
{
    mclInitializeApplication();
 
    testInitialize();
    testTerminate();
    mclTerminateApplication();
 
  system("PAUSE");	
  return 0;
}
Quelqu'un saurait-il pourquoi ça plante?
Merci

*En fait pour compiler sans erreur, j'ai du commenter les lignes suivantes dans mclmcr.h, sinon j'avais des syntax error:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
EXTERN_C int mclGetScalarInt64(void** ppv, mxInt64 re, mxInt64 im, mxComplexity cmplx);
EXTERN_C int mclGetScalarUint64(void** ppv, mxUint64 re, mxUint64 im, mxComplexity cmplx);
J'ai aussi un conflit de variables pour int32_t qui est déclarée dans stdint.h puis redéclarée dans mclmcr.h.