2017-03-18 4 views
2

J'utilise Code :: Blocks v 16.1.0.0 avec le MINGW qui l'accompagne. Il y a un problème avec l'éditeur de liens. Je ne peux pas lier un seul fichier en-tête/source à un fichier source en utilisant #include "sth". Pour réduire le problème je n'ai que 1 source et 1 fichier d'en-tête dans mon projet, mais je ne peux pas contourner cette erreur quels que soient les fichiers que j'utilise et les options que j'essaie.Code :: Blocks error: ld a retourné 1 status de sortie

Ceci est le journal de construction

-------------- Build: Debug in MISC (compiler: GNU GCC Compiler)--------------- 

gcc.exe -Wall -Wextra -Wall -g -std=c99 -c C:\Users\username\Documents\CodeBlocks\C\MISC\readFileByChars.c -o obj\Debug\readFileByChars.o 
g++.exe -LC:\Users\username\Documents\CodeBlocks\C\MISC -o bin\Debug\MISC.exe obj\Debug\readFileByChars.o readFileByChars.h.gch 
readFileByChars.h.gch: file not recognized: File format not recognized 
collect2.exe: error: ld returned 1 exit status 
Process terminated with status 1 (0 minute(s), 0 second(s)) 
1 error(s), 0 warning(s) (0 minute(s), 0 second(s)) 

Voici les répertoires toolchain:

enter image description here

Je n'ai aucun cas l'exclusion des programmes en cours d'exécution. J'ai aussi travailler indépendamment de MINGW (sans inclure son dossier bin dans les variables d'environnement pour ne pas confondre les blocs de code lors de la construction), mais pour les blocs de code, j'inclus le préemballé fourni avec son installation. Lorsque je clique sur l'option pour lier un fichier d'en-tête dans mon projet, le projet ne se construira pas (mais si je ne lie pas le fichier, comment puis-je construire mon application?). Je répète que ce projet est vide, je n'ai qu'un en-tête et un seul fichier source inclus. J'ai vu d'autres questions similaires à ce sujet ici, mais leurs solutions n'ont pas fonctionné. L'aide sera appréciée. Je vous remercie.

Répondre

3

There is a problem with the linker. I cannot link a single header/source file to a source file using #include "sth"

Il n'y a pas de problème avec l'éditeur de liens. Vous ne pouvez pas lier des fichiers d'en-tête ou des fichiers sources. Vous pouvez seulement compiler source fichiers (qui peut #include fichiers d'en-tête), pour produire des fichiers objet.

Un fichier d'en-tête que vous #include pouvez être un precompiled header file, pour les statisticiens qui prennent en charge ce concept, sous réserve de compilateur spécifique restrictions sur son utilisation (et malgré le nom, un fichier d'en-tête précompilé n'est pas compilé: il n'est pas un fichier objet).

L'éditeur de liens peut uniquement lier des fichiers objet et des bibliothèques dynamiques pour produire un fichier exécutable. Il peut consommer des fichiers objets directement ou les extraire d'une bibliothèque statique.

Votre commande de liaison défaillant:

g++.exe -LC:\Users\username\Documents\CodeBlocks\C\MISC -o bin\Debug\MISC.exe obj\Debug\readFileByChars.o readFileByChars.h.gch 

montre que vous essayez de lier un en-tête précompilé readFileByChars.h.gch. L'éditeur de liens dit:

readFileByChars.h.gch: file not recognized: File format not recognized 

parce qu'un en-tête précompilé n'est pas un fichier objet ou une bibliothèque statique ou dynamique. Ce n'est pas quelque chose que l'éditeur de liens comprend.

Corrigez les options de votre projet afin de ne plus transmettre readFileByChars.h.gch en tant qu'entrée de l'éditeur de liens.

Vous avez probablement passé le special steps pour générer l'en-tête précompilé readFileByChars.h.gch dans votre projet Code :: Blocks. Si vous avez correctement suivi cette documentation, il n'y a rien d'autre à faire que la documentation ne mentionne pas. Vos autres options de projet n'ont pas besoin de dire au compilateur ou à l'éditeur de liens à propos de l'en-tête précompilé.

Il n'est pas nécessaire d'utiliser des en-têtes précompilés et, comme vous le voyez, leur utilisation correcte n'est pas infaillible et est spécifique au compilateur. Je voudrais vous suggère de construire ce projet et d'autres de la manière ordinaire, sans en-têtes précompilés, jusqu'à ce que et sauf si vous faites face à des temps de compilation longs obstructifs, qui un en-tête précompilé pourrait utilement réduire.

+0

Réponse éclairante. Je pensais que je savais comment les choses fonctionnent, mais pas tout à fait. Donc, pour une construction réussie (avec des en-têtes non précompilés), je ne devrais pas cliquer sur compiler, ni créer de lien pour un fichier d'en-tête. Je devrais seulement cliquer sur compiler et lier sur les fichiers sources '.c' ou' .cpp'. –