J'essaie de comprendre pourquoi je reçois une erreur undefined reference
pendant la liaison:Trouver la cause racine de `erreur de reference` non défini
/home/amirgon/projects/esp8266/esp-open-sdk/xtensa-lx106-elf/bin/xtensa-lx106-elf-gcc -L/home/amirgon/projects/esp8266/esp-open-sdk/sdk/lib -T/home/amirgon/projects/esp8266/esp-open-sdk/sdk/ld/eagle.app.v6.cpp.ld -nostdlib -Wl,--no-check-sections -u call_user_start -Wl,-static -Wl,--start-group -lc -lgcc -lhal -lphy -lpp -lnet80211 -llwip -lwpa -lmain build/app_app.a -Wl,--end-group -o build/app.out
build/app_app.a(routines.o):(.text+0x4): undefined reference to `pvPortMalloc(unsigned int, char const*, int)'
gcc se plaint qu'il n'a pas pu trouver la fonction pvPortMalloc
.
Cependant, je peux confirmer cette fonction existe dans libmain.a
!
Dans la ligne de commande ci-dessus, libmain est référencé par -lmain
et le chemin de bibliothèque est défini sur -L/home/amirgon/projects/esp8266/esp-open-sdk/sdk/lib
. Quand je largue les symboles de libmain.a
sur ce chemin que je peux trouver pvPortMalloc
marqué comme T
, ce qui signifie que le symbole est dans le texte (code) section:
/home/amirgon/projects/esp8266/esp-open-sdk/xtensa-lx106-elf/bin/xtensa-lx106-elf-nm -g /home/amirgon/projects/esp8266/esp-open-sdk/sdk/lib/libmain.a | grep pvPortMalloc
U pvPortMalloc
0000014c T pvPortMalloc
U pvPortMalloc
Alors, ai-je manqué quelque chose? quelle pourrait être la raison pour laquelle gcc ne trouve pas la fonction bien qu'elle existe dans libmain.a?
Comment puis-je déboguer davantage cette erreur?
Besoin d'obtenir vos bibliothèques après vos fichiers .o sur la ligne de liaison, je crois. L'ordre est important dans la liaison. –
@FredLarson Le '--start-group' /' --end-group' ne le corrigerait-il pas?il devrait résoudre les symboles de façon itérative jusqu'à ce que tous les symboles soient résolus. –
Je pense que cela ne fonctionne que pour les fichiers. A, pas pour les fichiers. –