2017-03-18 635 views
2

我使用Code :: Blocks v 16.1.0.0以及附带的MINGW。链接器存在问题。我无法使用#include "sth"将单个标题/源文件链接到源文件。为了缩小问题,我的项目中只有1个源文件和1个头文件,但无论我使用哪个文件和我尝试的选项,我都无法绕过此错误。Code :: Blocks错误:ld返回1退出状态

这是生成日志

-------------- 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)) 

这是工具链目录:

enter image description here

我没有运行任何程序以前的实例。我也有独立工作的MINGW(没有在环境变量中包含它的bin文件夹,不会在构建过程中混淆codeblocks),但是对于codeblocks,我包含了预安装的代码块。当我点击选项链接我的项目中的头文件时,项目不会生成(但如果我不链接文件,我如何构建我的应用程序?)。我重申这个项目是空的,我只有一个头文件,并且只包含一个源文件。我在这里看到了有关这方面的其他类似问题,但他们的解决方案无效。帮助将不胜感激。谢谢。

回答

3

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

链接器没有问题。你不能链接头文件或源文件。您只能编译源文件 (可能是#include头文件),以生成目标文件。

,你#include可以是precompiled header file, 支持此概念的编译器,符合编译器特定的限制 其使用头文件(尽管名字,预编译的头文件不是编译:它对象文件不是 )。

链接器只能链接目标文件和动态库以生成可执行文件。 它可以直接使用目标文件,也可以从静态库中提取目标文件。

发生故障的联动指挥:

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

表明你正试图链接预编译的头readFileByChars.h.gch。链接器说:

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

因为预编译的头是不是一个对象文件或静态或动态 库。这不是链接器所能理解的。

纠正您的项目选项,以便您不再将readFileByChars.h.gch 作为链接器输入。

大概你已经通过了special steps 在Code :: Blocks项目中生成预编译头文件readFileByChars.h.gch。 如果您已经正确地遵循了该文档,则没有其他事情需要您执行,文档 未提及。您的其他项目选项不需要告知编译器或链接器关于预编译头的任何内容 。

根本没有必要使用预编译头,正如你所看到的,它们的正确使用并非万无一失,而且是编译器特有的。我会 建议你以普通的方式建立这个和其他项目,没有预编译头文件,直到并且除非你正面临阻塞性的长编译时间,那么预编译头文件可能会有效地减少。

+0

启发性答案。我以为我知道事情是如何运作的,但并不完全。所以对于一个成功的构建(没有预编译头文件),我不需要单击编译,或链接任何头文件。我只应点击编译并链接源文件'.c'或'.cpp'。 –

相关问题