【问题标题】:Process terminated with status 1 in code blocks进程在代码块中以状态 1 终止
【发布时间】:2020-12-12 12:07:12
【问题描述】:

当我尝试构建文件时,它是在构建日志中以状态 1 终止的进程出现的。我目前正在学习 atmega328p,我将它用于这个项目(喇叭系统),我在这里有完整的代码hornsystem。谁能帮帮我,这是构建日志。

------------- Build: Debug in casestudy (compiler: GNU GCC Compiler for AVR)---------------

avr-gcc.exe -LC:\WinAVR\avr\lib -o bin\Debug\casestudy.elf obj\Debug\fuse.o obj\Debug\GPIO.o obj\Debug\Hornstate.o obj\Debug\main.o obj\Debug\modes.o 
obj\Debug\temperature.o  -mmcu=atmega328p -Wl,-Map=bin\Debug\casestudy.map,--cref  
obj\Debug\Hornstate.o:(.data+0x0): multiple definition of `default_dutycycle'
obj\Debug\GPIO.o:(.data+0x0): first defined here
obj\Debug\main.o:(.data+0x0): multiple definition of `default_dutycycle'
obj\Debug\GPIO.o:(.data+0x0): first defined here
obj\Debug\modes.o:(.data+0x0): multiple definition of `default_dutycycle'
obj\Debug\GPIO.o:(.data+0x0): first defined here
obj\Debug\temperature.o:(.data+0x0): multiple definition of `default_dutycycle'
obj\Debug\GPIO.o:(.data+0x0): first defined here
Process terminated with status 1 (0 minute(s), 0 second(s))
0 error(s), 0 warning(s) (0 minute(s), 0 second(s))

【问题讨论】:

  • 错误提示“default_dutycycle 的多个定义”并告诉您定义它的文件。在文件GPIO.h 中,您有unsigned int default_dutycycle = 77;,并且此标头包含在其他几个文件中。最好不要在头文件中定义变量或函数:只定义它们的声明。
  • 感谢您的信息,错误已解决。我想,既然我用过ifndef,unsigned int default_dutycycle就不会每次都在main.c中定义了。
  • #ifndef 作为“标头保护”是为了防止循环包含,而不是包含在多个编译单元中。
  • 欢迎来到stackoverflow。如果您找到了问题的解决方案,那么如果您在答案中描述它然后接受该答案将非常有帮助 - 这将帮助其他有类似问题的用户更快地找到解决方案。如果我还可以建议编辑您的问题以使您更清楚您要做什么 - 例如,您要构建什么以及您要构建什么,这也可能有助于其他用户将您的问题识别为和他们一样。干杯。
  • 不要链接到站外代码。在问题中包含相关代码。

标签: c embedded


【解决方案1】:

从顶部而不是从底部读取(并修复)构建日志。您所指的错误仅表示构建失败。失败的原因前面已经介绍过了。

已经终止的进程我猜是项目构建者(make 最有可能)。 make(或任何构建系统)在构建完成或失败时终止。

由于前面几行中给出的原因,这里构建的链接器步骤失败了。实际错误是:

obj\Debug\Hornstate.o:(.data+0x0): multiple definition of `default_dutycycle'

随后的几行告诉您多个定义在哪里 mde:main.o、GPIO.o、Hornstate.o、modes.o 和 temperature.o。

很可能你有一个包含在所有这些中的头文件,其中包含一个定义,它应该只包含一个声明。例如,如果您有一个文件 temperature.h,其中包含:

int default_dutycycle = 50 ;

这是一个定义,将在每个包含 temperature.h 的源中重复。相反, temperature.h 应该包含:

extern int default_dutycycle ;

temperature.c 可能包含:

int default_dutycycle = 50 ;

如果default_dutycycle 是一个常量,另一种方法是将它定义为头文件中的宏:

#define default_dutycycle 50

虽然惯例会规定大写:

#define DEFAULT_DUTYCYCLE 50

【讨论】:

  • 请注意,我没有按照问题中实际代码的非现场链接进行操作 - 也不打算这样做。因此,答案包括对代码包含的内容的猜测。看过它的人的评论表明,该符号在 GPIO.h 而不是 temperature.h 中——但原则是成立的。
猜你喜欢
  • 2020-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-28
  • 1970-01-01
  • 2013-09-26
相关资源
最近更新 更多