Code :: Blocks错误:ld返回1退出状态

Nik*_*kos 2 c linker codeblocks linker-errors ld

我正在使用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))
Run Code Online (Sandbox Code Playgroud)

这是工具链目录:

在此输入图像描述

我之前没有任何程序运行实例.我也有MINGW独立工作(不在环境变量中包含它的bin文件夹,不要在构建期间混淆代码块),但是对于代码块,我包括安装附带的预先打包的代码块.当我单击选项链接我的项目中的头文件时,项目将无法构建(但如果我不链接文件,我如何构建我的应用程序?).我重复这个项目是空的,我只有一个标题,只包含一个源文件.我在这里看到过关于此问题的其他类似问题,但他们的解决方案无效.帮助将不胜感激.谢谢.

Mik*_*han 5

链接器存在问题.我无法使用#include"sth"将单个头/源文件链接到源文件

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

对于支持此概念的编译器,您#include可以作为预编译头文件的头文件,受编译器特定的使用限制(尽管名称,但未编译预编译头文件:它不是目标文件).

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

您失败的链接命令:

g++.exe -LC:\Users\username\Documents\CodeBlocks\C\MISC -o bin\Debug\MISC.exe obj\Debug\readFileByChars.o readFileByChars.h.gch
Run Code Online (Sandbox Code Playgroud)

表明您正在尝试链接预编译的标头readFileByChars.h.gch.链接器说:

readFileByChars.h.gch: file not recognized: File format not recognized
Run Code Online (Sandbox Code Playgroud)

因为预编译头不是目标文件或静态或动态库.它不是链接器理解的东西.

更正项目选项,以便不再readFileByChars.h.gch 作为链接器输入传递.

大概你已经完成了在Code :: Blocks项目中 生成预编译头的特殊步骤readFileByChars.h.gch.如果您已正确地遵循该文档,那么您无需执行任何其他文档未提及的操作.您的其他项目选项不需要告诉编译器或链接器有关预编译头的任何信息.

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