我正在使用Code :: Blocks v 16.1.0.0以及随附的MINGW。链接器存在问题。我无法使用#include "sth"
将单个标头/源文件链接到源文件。为了缩小问题,我的项目中只有1个源文件和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))
这是工具链目录:
我之前没有任何程序运行实例。我也有MINGW独立工作(不在环境变量中包含它的bin文件夹,不要在构建期间混淆代码块),但是对于代码块,我包括安装附带的预先打包的代码块。当我单击选项链接我的项目中的头文件时,项目将无法构建(但如果我不链接文件,我如何构建我的应用程序?)。我重复这个项目是空的,我只有一个标题,只包含一个源文件。我在这里看到过关于此问题的其他类似问题,但他们的解决方案无效。帮助将不胜感激。谢谢。
答案 0 :(得分:5)
链接器存在问题。我无法使用#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
。
如果您已正确地遵循该文档,那么您无需执行任何其他文档
没提。您的其他项目选项不需要告诉编译器或链接器任何东西
关于预编译的头文件。
根本没有必要使用预编译的标题,正如您所看到的那样 正确使用并非万无一失,并且是特定于编译器的。我会 建议你以普通的方式构建这个和其他项目,没有预编译头, 直到并且除非你面临阻碍性很长的编译时间,否则 预编译的头文件可能会缩减。
答案 1 :(得分:0)
这是我解决此问题的方法: 1.如果首先从项目退出代码块运行文件,请执行以下操作。 2.单独打开文件(不要打开codeblocks项目文件!)并运行。
答案 2 :(得分:0)
在工作区
右键单击包含主要方法的文件 -> 选项 ->(选中)同时启用
仅针对其他 *.c 文件(检查)编译
对于 *.h 文件(检查)禁用两者
构建和运行
答案 3 :(得分:-2)
真实答案:1.打开任务管理器(ctrl + shift + esc)
2.详细信息
3.搜索项目名称和结束任务(项目名称中会有一个.exe)
完成!