nous allons analyser “collect2: ld a retourné 1 code de sortie”?
Je sais que cela indique un problème de linker, surtout en suspens symboles. Je sais que, pour résoudre ce problème /à se débarrasser de la errormessage, on aurait à fournir beaucoup plus d'informations. Je sais il y a beaucoup de questions sur la résolution de ces problèmes sur la DONC déjà.
À mes questions dans le but d'aider à faire comprendre et ld, pour savoir à quoi (et à qui) est d'essayer d'exprimer ce que avec cette ligne.
collect2: ld returned 1 exit status
- Ce n' "collect2:" veux dire? Est-ce une étape faire appelle ? Je ne peux pas trouver un exécutable avec ce nom sur mon système.
- Signifie-t-il, je suis l'aide de ld ? J'ai configuré mon projet /Makefile, de sorte que g++ doit faire le lien entre les, alors pourquoi est-LD toujours impliqué
- Qui est de l'écriture de ce message ? faire ? ld ? g++ ?
- Est-il significatif liste des codes de sortie ?
collect2 fait partie de la gcc, sur mon système, c'est dans /usr/lib/gcc/i686-linux-gnu/4.6/collect2
OriginalL'auteur lImbus | 2012-09-25
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, vous devez savoir que les programmes de ligne de commande nommé
gcc
etg++
sont seulement parapluie (wrappers) sur le préprocesseur/parser-compilateur/assembleur/gestionnaire de commandes. Leur vrai nom estcpp
,cc1
oucc1plus
,as
etld
, respectivement. GCC aide dans l'unification de leur utilisation, interface de ligne de commande et une forte ensemble de défaut (et doit) otions pour eux. Il est très difficile, par exemple, pour lier un fichier binaire directement à l'aide de ld - si ld ne fonctionne pas avec tous les 20+ (IIRC) options de correction, il juste ne travail.Maintenant que vous savez cela, vous pouvez consulter:
Il signifie plutôt vous appeler GCC, mais à son tour il invoque LD. GCC elle-même ne sait rien - ni la compilation, ni liant, c'est juste un wrapper. (Allez faire un
wc -c
sur/usr/bin/gcc
et être surpris de voir que c'est seulement quelques kilo-octets! Maintenant faites la même chose pour/usr/libexec/gcc/cc1plus
et de découvrir l'horrible vérité: il est plusieurs 10 mégas gros!)Collect2 est aussi un autre niveau d'indirection entre gcc et de ld. Plus d'infos sur son site officiel.
Soit g++ (c'est autant que je sache) ou
collect2
lui-même peut-être.Le sens est classique de zéro signifie le succès, différente de zéro signifie l'échec. Si une liste exhaustive existe, il doit pouvoir être consulté par l'invocation
man ld
.OriginalL'auteur
Comme H2CO3 fait allusion, et pour avoir une idée de comment dur il serait lier manuellement, essayez d'exécuter g++ avec la verbose commutateur (-v). Il va afficher les commandes (avec quelques autres) pour toutes les étapes du processus (pré-traiter, compiler, de les assembler, lien).
Par exemple, la construction d'un simple "Hello, World" avec g++ sous Cygwin, les rendements:
...pour le lien de phase.
OriginalL'auteur joshbodily