MinGW undefined reference to malloc, free, sprintf, _beginthreadex
Je suis en utilisant MinGW. J'ai un code qui appelle la fonction malloc et quelques autres fonctions. Lorsque je tape:
gcc TestCode.c
- Je obtenir un a.exe fichier, il fonctionne parfaitement, et je ne suis pas du tout d'avertissements.
Si je tape ceci:
gcc -c TestCode.c -o TestCode.o
ld *.o
Je reçois tout un tas d'avertissements tels que:
TestCode.o:TestCode.c:(.text+0xa): undefined reference to `__main'
TestCode.o:TestCode:(.text+0x2e): undefined reference to `printf'
TestCode.o:TestCode:(.text+0x42): undefined reference to `_strerror'
TestCode.o:TestCode:(.text+0x69): undefined reference to `snprintf'
TestCode.o:TestCode:(.text+0x7e): undefined reference to `malloc'
TestCode.o:TestCode:(.text+0x93): undefined reference to `_strerror'
TestCode.o:TestCode:(.text+0xb1): undefined reference to `sprintf'
TestCode.o:TestCode:(.text+0xcf): undefined reference to `free'
Je suppose que c'est un problème avec la façon dont je vais appeler l'éditeur de liens. En tant que tel, je ne vais poster le code s'il n'est pas clair quel est le problème. J'espère que c'est une solution facile et que j'ai simplement oublié d'inclure certains super évident de la bibliothèque lors de la liaison.
double possible de erreur de Lien tout en utilisant compilateur MinGW (ne peut pas trouver __principales)
OriginalL'auteur Brett | 2012-03-14
Vous devez vous connecter pour publier un commentaire.
Il semble que votre
ld
n'a pas de lien entre toutes les bibliothèques par défaut. À partir de vos messages d'erreur, il semble que vous ayez besoin d'au moins la C runtime etlibc
. Utilisationgcc
de lien pour obtenir un peu de pratique les valeurs par défaut lié pour vous:Si vous vraiment souhaitez utiliser
ld
directement, vous allez avoir besoin de comprendre le nom de votre bibliothèque runtime C et de la libc. Par exemple (en supposant que les bibliothèques nommélibcrt
etlibc
):À l'aide de gcc comme un front-end pour l'éditeur de liens ne devrait pas faire de différence. Que voulez-vous dire "trop grand pour votre déménagement loin de l'aide de
ld
"?OriginalL'auteur Carl Norum
Comme Carl Norum a dit, vous pouvez passer des fichiers objets à
gcc
et il va savoir qu'il n'a pas besoin de compiler, qu'il transmet à l'éditeur de liens (que ce soit ou non vous êtes à la compilation d'autres fichiers source dans la même invocation).Et que vous devriez le faire que parce qu'il y a une bonne quantité de détails qui va dans le lien de la CGT et de support de windows bibliothèques (sauf si vous avez des besoins très particuliers de ne pas utiliser la valeur par défaut de l'exécution). Mon MinGW configuration des liens dans les articles suivants avec mes fichiers de l'objet:
Utiliser le
--verbose
option pour voir commentgcc
liens pour vous.OriginalL'auteur Michael Burr