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

时间:2017-03-18 12:36:55

标签: 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))

这是工具链目录:

enter image description here

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

4 个答案:

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

在工作区

  1. 右键单击包含主要方法的文件 -> 选项 ->(选中)同时启用

  2. 仅针对其他 *.c 文件(检查)编译

  3. 对于 *.h 文件(检查)禁用两者

构建和运行

答案 3 :(得分:-2)

真实答案:1.打开任务管理器(ctrl + shift + esc)
             2.详细信息
             3.搜索项目名称和结束任务(项目名称中会有一个.exe)
          完成!