OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6756|回复: 4

单独编译没错,知道是重定义,不知怎么改 求指导 谢谢

[复制链接]

21

主题

77

帖子

0

精华

初级会员

Rank: 2

积分
182
金钱
182
注册时间
2015-4-5
在线时间
0 小时
发表于 2015-8-11 11:59:39 | 显示全部楼层 |阅读模式
5金钱
Rebuild target 'stm32-demo'
compiling misc.c...
compiling stm32f10x_adc.c...
compiling stm32f10x_bkp.c...
compiling stm32f10x_can.c...
compiling stm32f10x_cec.c...
compiling stm32f10x_crc.c...
compiling stm32f10x_dac.c...
compiling stm32f10x_dbgmcu.c...
compiling stm32f10x_dma.c...
compiling stm32f10x_exti.c...
compiling stm32f10x_flash.c...
compiling stm32f10x_fsmc.c...
compiling stm32f10x_gpio.c...
compiling stm32f10x_i2c.c...
compiling stm32f10x_iwdg.c...
compiling stm32f10x_pwr.c...
compiling stm32f10x_rcc.c...
compiling stm32f10x_rtc.c...
compiling stm32f10x_sdio.c...
compiling stm32f10x_spi.c...
compiling stm32f10x_tim.c...
compiling stm32f10x_usart.c...
compiling stm32f10x_wwdg.c...
compiling main.c...
main.c(15): warning:  #223-D: function "uart_init" declared implicitly
     uart_init(9600);            //串口初始化为9600
main.c(18): warning:  #223-D: function "delay_Init" declared implicitly
    delay_Init();         
main.c(19): warning:  #223-D: function "sys_init" declared implicitly
    sys_init(); 
main.c: 3 warnings, 0 errors
compiling stm32f10x_it.c...
compiling delay.c...
compiling sys.c...
compiling rs485.c...
compiling modbus.c...
compiling usart3.c...
compiling i2c.c...
compiling system_stm32f10x.c...
compiling core_cm3.c...
assembling startup_stm32f10x_hd.s...
linking...
..\OUTPUT\demo.axf: Error: L6200E: Symbol __stdout multiply defined (by modbus.o and main.o).
..\OUTPUT\demo.axf: Error: L6200E: Symbol __stdout multiply defined (by usart3.o and main.o).
..\OUTPUT\demo.axf: Error: L6200E: Symbol _sys_exit multiply defined (by modbus.o and main.o).
..\OUTPUT\demo.axf: Error: L6200E: Symbol _sys_exit multiply defined (by usart3.o and main.o).
..\OUTPUT\demo.axf: Error: L6200E: Symbol fputc multiply defined (by modbus.o and main.o).
..\OUTPUT\demo.axf: Error: L6200E: Symbol fputc multiply defined (by usart3.o and main.o).
..\OUTPUT\demo.axf: Error: L6200E: Symbol SystemInit multiply defined (by system_stm32f10x.o and sys.o).
Not enough information to list image symbols.
Not enough information to list the image map.
Finished: 2 information, 0 warning and 7 error messages.
"..\OUTPUT\demo.axf" - 7 Error(s), 3 Warning(s).
Target not created

最佳答案

查看完整内容[请看2#楼]

我是昨晚刚解决的,想法分享 的 后来想 都是玩32的 大部分不会遇到就没有发。。。。我也是在一个人的博客上找到的。。。。 全局变量相关 全局变量是指在整个项目工程中可见。 首先要理解   定义和声明     变量定义使用“数据类型+变量名称”的形式,编译器需要给他分配内存单元的; 变量声明使用“extern 变量类型+变量名称”的形式,是告诉编译器我这个变量将在其 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

22

主题

109

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
367
金钱
367
注册时间
2015-5-28
在线时间
0 小时
发表于 2015-8-11 11:59:40 | 显示全部楼层
我是昨晚刚解决的,想法分享 的 后来想 都是玩32的 大部分不会遇到就没有发。。。。我也是在一个人的博客上找到的。。。。

全局变量相关
全局变量是指在整个项目工程中可见。
首先要理解   定义和声明
    变量定义使用“数据类型+变量名称”的形式,编译器需要给他分配内存单元的;
变量声明使用“extern 变量类型+变量名称”的形式,是告诉编译器我这个变量将在其他外部c文件中定义,我这里只是在外部用它,不需要分配内存单元。
这样编译器就不给他分配内存空间,而等到真正遇到变量定义的时候再给他分配内存空间。
 这样说 大家应该了解了吧,这样举个例子
用C语言编写程序的时候,我们经常会遇到这样一种情况:希望在头文件中定义一个全局变量,然后包含到两个不同的c文件中,希望这个全局变量能在两个文件中共用。
Key变量我需要在main.c和qq.c中使用,最开始我的想法是在qq.h中定义了,然后在main.c中用include包含就行了,连接正确,可是编译出问题了,错误是重复定义了,找了好久毛病没弄懂,后来在一个博客里发现的  #include命令就是原封不同的把头文件中的内容搬到#include的位置,所以相当于main.c和qq.c中都执行了一次unsigned char key,
而C语言中全局变量是项目内(或者叫工程内)可见的,这样就造成了一个项目中两个变量key,编译器就认为是重复定义。
此刻参考我上面说的定义和声明?有思路没?
就是在一个.c文件里定义char key,在另一个.c文件里用extern声明
 下面来说说结构体是如何定义的

不同于普通类型,如果不预先通知编译器,编译器是不会识别你自定义的类型的。这个时候,*.h文件便出现了。不是定义结构类型不占内存吗?那好,我大结构体的定义放在*.h文件中,这样一来,无论你incude无数次,内存都不会被占用的。而且这样还有个好处,在别的文件中可以include这个*.h文件,这样,在这个文件中,编译器就可以识别你的自定义类型了,目的不就达到了???假如我在global.h中定义了
typedef struct _POSITION
{
????????int x;
????????int y;
}POSITION;
那么我可以在一个global.c文件中实现全局变量的定义,不过要include那个*.h文件,比如
/* ***global.c ******* */?
include “global.h”
POSITION current,;??
这样就定义了cunrrent这个变量,在别的文件中引用这个变量时,只要extern OSITION current;进行声明,然后就可以用了,不过这个文件也还得include "global.h" 因为如果不包含,在这个文件中是不识别POSITION类型的。
再不玩命努力,你就老了
回复

使用道具 举报

21

主题

77

帖子

0

精华

初级会员

Rank: 2

积分
182
金钱
182
注册时间
2015-4-5
在线时间
0 小时
 楼主| 发表于 2015-8-11 11:59:40 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
没事  谢了
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-8-11 23:07:21 | 显示全部楼层
这个问题貌似不好解决。以前遇到过,但是忘记解决办法了。。。
所以,帮不到你。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

21

主题

77

帖子

0

精华

初级会员

Rank: 2

积分
182
金钱
182
注册时间
2015-4-5
在线时间
0 小时
 楼主| 发表于 2015-8-12 08:41:09 | 显示全部楼层
回复【3楼】逍遥居士_888:
---------------------------------
多谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-23 14:01

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表