Bonjour à tous,
Alors voila j'ai un soucis de référence indéfinie lors de la compil d'un programme tout simple. Il s'agit d'un main de debug pour un fichier C déstiné à être utilisé plus tard sous Matlab en tant que SFunction de Simulink.
Je sais que d'habitude le problème de référence indéfinie viens du non linkage des librairies à la compilation. Dans mon cas, j'ai bien lié la lib au moment de la compil.
Pour info, je suis sous Windows Xp, et je compile avec MinGW
Dans mon code C je cherche à appeler la function isValidIpAddress(char *ip)
Je me suis fait une librairie statique MatlabUtility (d'autres fonction viendront) :
MatlabUtility.h
MatlabUtility.c
Pour compiler la librairie :
Lorsque je regarde l'index de la lib (ar -t libMatlabUtility.a) j'ai bien :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4gcc -c MatlabUtility.c -o MatlabUtility.o -LD:\Matlab\custom\lib\ -ID:\Matlab\custom\include\ ar r libMatlabUtility.a MatlabUtility.o ranlib libMatlabUtility.a
La compilation de mon fichier debug se fait comme ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part 0000001e T _isValidIpAddress
et la j'ai une référence indéfinie vers isValidIpAddress que je ne comprends pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part c:\MinGW\bin\gcc -Wall -LD:\Matlab\custom\lib\ -lMatlabUtility -I D:\Matlab\custom\include\ D:\Matlab\custom\debug.c -o D:\Matlab\custom\src\debug.exe -lregex
Pas de messages d'erreur disant que la lib n'est pas trouvée...
Le fichier d'entête est bien inclus dans le fichier de debug.
Et ma fonction dans ma librairie est définie comme telle :
La je seche, j'ai pas mal cherché, mais je n'ai pas trouvé grand chose.
Code : Sélectionner tout - Visualiser dans une fenêtre à part int isValidIpAddress(char* strIpParameter)
Je viens donc vous voir.
Est-ce normal qu'un underscore apparaisse dans la table de ma librairie avant le nom de la fonction, alors qu'il n'y en a ni dans le .h ni dans le .c??
Merci d'avances
Partager