Cela signifie que les fonctions appelées xtmpmain.c appelées uart_setup()
et uart_cleanup()
, mais ils n'ont pas été trouvés par l'éditeur de liens. Vous devez probablement inclure une bibliothèque ou implémenter ces fonctions pour Windows en termes d'API Win32.
Certains "est branché sur les questions" sont:
- sont les fonctions déclarées?
- Les fonctions sont-elles définies (c'est-à-dire implémentées)?
- Avec exactement ces noms?
- Ces définitions ont-elles été exclues par le préprocesseur?
- Il existe une option gcc qui contrôle la présence ou l'absence d'un trait de soulignement. Vous n'avez pas accidentellement utilisé cela pour un fichier et pas d'autres, n'est-ce pas?
- Vérifiez la convention d'appel déclarée.
__cdecl
et __stdcall
sont des animaux très différents. Ils produisent généralement des noms de symboles exportés incompatibles pour des raisons de sécurité, et cette erreur peut en être un symptôme.
S'il s'agit d'un projet de portage, il est probable que l'implémentation d'origine d'une fonction UART est écrite de manière dépendante de la plate-forme. Dans ce cas, ils seraient souvent protégés par un #ifdef
d'une certaine forme qui dépend de la plate-forme de compilation. Pour résoudre ce problème, vous devez les implémenter pour cette plate-forme, dans un style compatible avec leur utilisation dans le reste de l'application, et de manière similaire.
comment? Ces deux fns sont définis par moi dans xtmpmain.c son semblable à ordinaire fns r8? –
Ils n'ont pas été définis avec ces noms exacts (sans le trait de soulignement principal qui est commun C name mangling) dans n'importe quel fichier nommé sur votre ligne de liaison, ou l'éditeur de liens les aurait trouvés. Vérifiez attentivement l'orthographe et assurez-vous qu'ils n'ont pas été ignorés par #ifdef ou similaire. – RBerteig