今天移植代码时遇到一个比较奇葩的问题,记录如下:

Error[Li006]: duplicate definitions for "Uart3"; in "E:\IAR_1768Pro_PCB799\Debug\Obj\Uart3_init.o", and "E:\IAR_1768Pro_PCB799\Debug\Obj\uModemG600.o"

重复定义 变量 Uart3

可是,uModemG600.c 文件中没有 Uart3 这个变量 ,只有 uart3.h 这个头文件,问题就出现在在这头文件中。

Uart3 这个变量的定义就放在 uart3.h 中,而且 uart3.h 在uart3.c 和 uModemG600.c 中都有#include , uart3.h 也未做条件编译,导致uart3.h 重复编译, 变量重复定义。

//===================问题描述完毕,一下是个人观点======================

我个人的做法是,变量/函数 定义在 *.c 文件中,变量/函数声明在 *.h 文件中, 并且 *.h 文件加编译条件,放置重复包含,格式如下:

user.c

 //user.c file

 #include <stdio.h>
#include <string.h>
#include "user.h" signed char g_a = ;
unsigned char g_b = ;
signed int g_c = ; void fun1(void)
{
//do something
} void fun2(void)
{
//do something
}

user.h

#ifndef _USER_H_
#define _USER_H_ extern signed char g_a;
extern unsigned char g_b;
extern signed int g_c; void fun1(void);
void fun2(void); #endif

IAR ERROR --- [Li006]的更多相关文章

  1. Error[Li006]: duplicate definitions for "******"

    今天参考别人程序写程序时出现Error[Li006]: duplicate definitions for "******". 参考程序中将变量和数据定义在(.h)文件中,我也就直 ...

  2. IAR:Error [Li005]:no definition for"***" 问题之连接

    对于 IAR 出现的 Error[Li005] 链接错误,网上已经给出了比较详尽的解决方法,而对于这次记录,主要是记录解决问题的思路. 网上给出的方法:http://blog.csdn.net/yue ...

  3. Keil和IAR——使用笔记

    1. 几个宏的定义 Keil和IAR均用到以下三种宏定义,分别是:USE_STDPERIPH_DRIVER——表示使用ST提供的标准外设固件库:STM32F40_41xxx——作为芯片的判断:VECT ...

  4. IAR EWAR 内联汇编 调用外部函数 Error[Og005], Error[Og006]

    How do I call a C function in another module from inline assembler in IAR EWARM? I have a bit of ass ...

  5. IAR EWAR 内联汇编 Error[Og010], Error [Og005], Error [Og006]

    Error [Og005] + [Og006] when using inline assembler EW targets: 430, ARM, AVR EW component: C/C++ co ...

  6. IAR FOR STM8S 错误 An error occurred while retrieving GDI features: gdi-error [40201]解决方法

    今早使用IAR调试编译调试一个工程,发现IAR竟然出现如下错误信息 An error occurred ]: Can't access configuration database 在网上查看了一下, ...

  7. STM32+IAR 解决Error[Pe147]: declaration is incompatible with "__nounwind __interwork __softfp unsigned

    在IAR中编译STM32工程,遇到 Error[Pe147]: declaration is incompatible with "__nounwind __interwork __soft ...

  8. IAR 编译错解决Error[e16]: Segment NEAR_Z (size: 0x16d align: 0) is too long for segment definition. At least 0x83 more bytes needed.

    Error[e16]: Segment NEAR_Z (size: 0x16d align: 0) is too long for segment definition. At least 0x83 ...

  9. IAR错误Error[e16]: Segment ISTACK (size: 0xc0 align: 0) is too long for segment definition. At least 0xd more bytes needed. The problem occurred while processing the segment 的解决办法

    IAR for 8051 IDE version 9.10.1编译阿莫单片机的cc2541程序osal第一节教程出现错误如下 出错的愿意是iar设置错误.所以需修改IAR的设置. 解决办法如下: 即可 ...

随机推荐

  1. 日志分析(二) logstash patterns

    grok-patterns内置了很多基础变量的正则表达式的log解析规则,其中包括apache的log解析(同样可以用于nginx的log解析).   基于nginx日志分析配置: 1.配置nginx ...

  2. VBA Mysql 类

    Option Explicit '==================================== 声明属性 =================================Private ...

  3. C# 之 获取服务器IP,客户端IP以及其它

    1.获取客户端IP:Request.ServerVariables.Get("Remote_Addr").ToString(); 2.获取客户端主机名:Request.Server ...

  4. Socket的使用

    import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import jav ...

  5. c语言排序算法总结

    一.希尔(Shell)排序法 /* Shell 排序法 */ #include <stdio.h> void sort(int v[],int n) {      int gap,i,j, ...

  6. ConcurrentHashMap和Hashtable区别

    Hashtable:synchronized是针对整张Hash表的,即每次锁住整张表让线程独占安全的背后是巨大的浪费 ConcurrentHashMap和Hashtable主要区别就是围绕着锁的粒度以 ...

  7. 区间求mex的两种方法

    区间求mex的两种方法 1.莫队+分块/莫队+二分+树状数组 2.线段树 预处理1-i的sg值(用一个vis数组,一个cur指针) 预处理nxt数组(a[nxt[i]]=a[i]) 枚举左端点l, 考 ...

  8. Git CMD - rm: Remove files from the working tree and from the index

    命令格式 git rm [-f | --force] [-n] [-r] [--cached] [--ignore-unmatch] [--quiet] [--] <file>…​ 命令参 ...

  9. 诡异的问题“该字符串未被识别为有效的 DateTime”

    问题描述:"该字符串未被识别为有效的 DateTime"这个异常相信大家都会碰到,但是这一次真的无法理解,服务器运行一段时间之后才会出现这个问题,并且是系统中所有和日期相关的模块, ...

  10. asp网站发布步骤总结

    1.在VS2012中打开索要发布的网站,初始页可重命名为index.html或default.apx. 2.点击  生成>生成“网站”,然后“发布网站”. 3.进行发布设置: (1 配置文件 ( ...