Sujet : gcc/linux => mingw/windows/cygwin De : JKB (at) *nospam* hilbert.invalid (JKB) Groupes :fr.comp.lang.c Date : 25. Nov 2024, 15:37:29 Autres entêtes Organisation : NUO - News.Usenet.Ovh Message-ID :<slrnvk92t9.360.JKB@hilbert.systella.fr> User-Agent : slrn/1.0.3 (Linux)
Bonjour à tous,
Je suis en train d'essayer de compiler un bout de code qui fonctionne parfaitement sous Linux pour un client qui n'a que Windows 10. Il s'agit d'un genre de terminal utilisant GNU/readline, sqlite et un pilote fourni par Cypress. J'en ai les sources.
Pour simplifier le problème, je tente une compilation statique.
Mon code ne semble pas poser problème. En revanche, il y a un problème avec la compilation du code de Cypress.
J'arrive à compiler tous les .c en .o. Une fois ceci fait, je construit une bibliothèque : ar r libcyusbserial.a *.o ranlib libcyusbserial.a
Un nm libcyusbserial.a | grep " T " montre que les symboles sont définis.
000000000000592d T CyUartClearDtr 000000000000577d T CyUartClearRts 000000000000557a T CyUartGetHwFlowControl 0000000000005169 T CyUartRead 00000000000055d4 T CyUartSetBreak 0000000000005851 T CyUartSetDtr 0000000000005499 T CyUartSetHwFlowControl 000000000000569f T CyUartSetRts 0000000000005045 T CyUartWrite
Tout est bon. Côté Windows/Cygwin, la même commande renvoie : 000000000000149f T CyUartClearDtr 00000000000012cc T CyUartClearRts 00000000000010a4 T CyUartGetHwFlowControl 0000000000000cba T CyUartRead 0000000000001103 T CyUartSetBreak 00000000000013b3 T CyUartSetDtr 0000000000000fB0 T CyUartSetHwFlowControl 00000000000011de T CyUartSetRts 0000000000000b93 T CyUartWrite U __imp_CyUartClearDtr U __imp_CyUartClearRts U __imp_CyUartSetDtr U __imp_CyUartSetHwFlowControl U __imp_CyUartSetRts
Je comprends donc que ces cinq fonctions ne sont pas définies dans la bibliothèque.
En cherchant dans les *.o, ces cinq symboles proviennent de cyusb.c. Or la seule fois où CyUartClearDtr() est appelée depuis ce fichier est par la ligne suivante :
CyUartClearDtr (handle);
Je ne comprends pas pourquoi mingw rajoute __imp_ devant le nom de cette fonction.
La ligne de compilation de ce fichier est la suivante : gcc -g -Wall -o libcyusb.o -c cyusb.c -I../../common/header (sous Cygwin).
Je suis preneur de toute lumière.
Bien cordialement,
JB
-- Si votre demande me parvient en code 29, je vous titiouillerai volontiers une réponse.