oui, je sais, ici c'est arduino, mais c'est bien là mon but.
Avant d'arriver à arduino et faire fonctionner mon LD8001B de façon appropriée, je veux compiler un programme apparament tout simple en C. Ensuite, je reprendai le tout en arduino.
Voici les erreurs de compilations obtenues:
/usr/bin/ld : /tmp/ccY3DquQ.o : dans la fonction « main » :
main.c:48 : référence indéfinie vers « MY_NVIC_SetVectorTable »
/usr/bin/ld : main.c:56 : référence indéfinie vers « adt3102SystemInit »
/usr/bin/ld : main.c:57 : référence indéfinie vers « adt3102ModuleInit »
/usr/bin/ld : /tmp/ccY3DquQ.o : dans la fonction « rxAndParseData » :
main.c:77 : référence indéfinie vers « tinyFramefRx »
/usr/bin/ld : main.c:86 : référence indéfinie vers « tinyFramefTx »
collect2: error: ld returned 1 exit status
Je prétends être en mesure de répéter la solution si nous arrivons à corriger la première erreur qui est:
référence non-définie vers MY_NVIC_SetVectorTable dans main.c à la ligne 56
Voici les premières lignes de main.c
et adt3102_system.h est bien appelé par main.h dès la ligne 4
Tous les fichiers .h sont réunis dans un seul et même répertoire, le compilateur n'a donc pas à chercher sur mon disque.
Le fichier .c correspondant (adt3102_system.c) est lui aussi présent dans ce même répertoire.
Votre commande ne compile que main.c et inclut uniquement la bibliothèque mathématique via l’option -lm, qui lie la bibliothèque partagée /usr/lib/libm.so (précompilée).
➜ avec cette commande le compilateur ne sait pas qu’il y a d’autres fichiers de code et n’inclut pas automatiquement les autres fichiers .c du répertoire dans sa compilation et édition de liens.
Pour inclure tous vos fichiers .c, essayez de remplacer main.c par *.c dans votre ligne de commande comme ceci :
gcc -Wall -g -o LD80001B *.c -lm
« L’étoile point c » veut dire « tous les noms de fichiers qui se terminent par .c dans le répertoire courant ».
Cela permet de compiler individuellement chaque fichier .c en un objet intermédiaire, puis de lier tous ces objets pour former l’exécutable.
Enfin, si votre projet dépend aussi d’autres bibliothèques systèmes ou externes, vous devez les ajouter explicitement dans la phase d’édition de liens avec l’option -l<nom_de_la_bibliothèque>.
Par exemple, pour lier une bibliothèque nommée libxyz.so, ajoutez -lxyz à votre commande comme c’est fait pour le bibliothèque mathématique pour le moment.
(Peut être vous devriez lire un tuto sur la compilation séparée et l’édition de liens)
Je pensais me lancer dans quelque chose d'archi-simple parce - supposément - ça fonctionnait. Et bien, la compilation comme vous me dites de le faire m'a retourné une tonne de messages d'erreur de type « fichier manquant », puis - depuis que tous les fichiers sont là, le compilateur se plaint de liens circulaires ou de variables non-définies.
C'est du code qui - me disait-on - fonctionnait. C'est pourquoi j'osai me lancer dans cela. Mais là, ça dépasse clairement mes compétences. Je retournerai simplement le code là d'où il vient et je demanderai quelque chose de vraiment fonctionnel.