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

网上给出的方法:http://blog.csdn.net/yueniaoshi/article/details/7844653

问题的本质都是一样的,这在问题给出的描述中已经说的很清楚了,是某个函数或者变量没有定义。

新来的同事在将一个工程从keil移植到iar时,出现了上述的连接错误,第一次遇到这样的文体,我也很纳闷,因为根据提示 是有两个库函数没有定义,可是定位到相应的库函数,发现都有定义和实现,对应的头文件也都包含了。在网上搜索到了类似的问题,按照网上找到的方法无法解决。想到是工程移植,会不会是文件路径不对?于是就尝试着去更改头文件的路径,当我删掉第一个头文件的路径后,工程竟然编译连接成功了;当我恢复这个路径,工程又出现刚才的连接错误;如果把这个路径放在最后面,工程竟也能编译连接成功。

问题解决了,知其然当知其所以然,进入到删掉的头文件路径(工程路径)下,里面只有一个头文件  lpc17xx_libcfg.h,而这个头文件在另一个路径(drivers\include)中也存在,include路径下的头文件才是正版的,但这个正版的在工程中并没有被应用。下面进入到本次博文的正题:

1.lpc17xx_libcfg.h 与上述连接错误的关系

追根溯源,iar给出的错误是:Error[Li005]:no define for "GPIO_SetDir",意思就是说GPIO_SetDir()这个函数没有定义,而根据搜索的信息显示GPIO_SetDir()这个函数是在lpc17xx_gpio.c中定义和实现的,在lpc17xx_gpio.h申明,这两个文件都在编译文件中,但是问题是lpc17xx_gpio.c被编译需要一个条件 #ifdef _GPIO,而这个条件需要在lpc17xx_libcfg.h中给出,工程路径下的lpc17xx_libcfg.h是原始的头文件外围功能相关的宏都是被注释了,所以lpc17xx_gpio.c并没有被编译。如果要正常使用外围功能,应该是这样的一个流程:lpc17xx_libcfg.h 放开需要的外围功能宏注释(如_GPIO),相关外围功能库文件(.c文件)编译条件成立被成功编译(如lpc17xx_gpio.c)

2.工程路径下的lpc17xx_libcfg.h 在前和在后的区别

  在前面我们说过,当这个路径在前面时,连接是不成功的,但是放在最后面连接是可以通过的。这就关系到连接器在遇到同名的头文件是的处理方式,一般在我们的程序中都使用了#include来包含我们可能会使用到的头文件,当编译完成,连接的时候,连接器会首先从我们提供的路径中去搜索需要的头文件,如果没有找到就会去默认路径下搜索头文件;如果找到了,就中止该文件的搜索行为,忽略后面的路径。

其实可以把文件连接看作是填坑。

IAR:Error [Li005]:no definition for"***" 问题之连接的更多相关文章

  1. kinaba 安装踩坑: FATAL Error: [elasticsearch.url]: definition for this key is missing

    操作系统:Linux kibana 版本: 7.4.0 1. 在/etc/yum.repos.d/ 下新建 kibana.repo  配置 yum 源地址 内容如下: [root@localhost ...

  2. kinaba 安装踩坑: FATAL Error: [elasticsearch.url]: definition for this key is missing 转

     安装  https://www.jianshu.com/p/875457cb8da6   操作系统:Linux kibana 版本: 7.4.0 1. 在/etc/yum.repos.d/ 下新建 ...

  3. spring+ibatis问题1—— 程序报错:java.sql.SQLException: Io 异常: Connection reset by peer, socket write error; ”或“java.sql.SQLException 关闭的连接”异常

    转自:http://blog.sina.com.cn/s/blog_1549fb0710102whz2.html spring+ibatis程序测试时报错:java.sql.SQLException: ...

  4. IAR ERROR --- [Li006]

    今天移植代码时遇到一个比较奇葩的问题,记录如下: Error[Li006]: duplicate definitions for "Uart3"; in "E:\IAR_ ...

  5. 痞子衡嵌入式:浅析IAR下调试信息输出机制之硬件UART外设

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是IAR下调试信息输出机制之硬件UART外设. 在嵌入式世界里,输出打印信息是一种非常常用的辅助调试手段,借助打印信息,我们可以比较容易地 ...

  6. Error reporting for dbus

    D-Bus 1.13.14 目录 Detailed Description Function Documentation ◆ dbus_error_free() ◆ dbus_error_has_na ...

  7. 解决 Error: getaddrinfo EADDRINFO 错误

    安装npm失败,提示Error: getaddrinfo EADDRINFO,原因在于虚拟机未连接互联网,悲剧.

  8. python-socket.error[10054]:对象的复制

    1.socket.error[10054],对方强制关闭了连接 在用socket.recvfrom时,若事先没有bind时, 先使用socket.sendto,socket.recvfrom 有时会出 ...

  9. IAR 1.3 for STM8 ST-Link无法调试 无法仿真 the debugging session could not be started

    IAR 1.3 for STM8 ST-Link无法调试 the debugging session could not be started CPU型号是:STM8F103F3 首先要用ST Vis ...

随机推荐

  1. 琐碎-关于hadoop2.X那些端口

    此文转载http://www.aboutyun.com/thread-7513-1-1.html Hadoop集群的各部分一般都会使用到多个端口,有些是daemon之间进行交互之用,有些是用于RPC访 ...

  2. STL之heap

    STL的堆操作 STL里面的堆操作一般用到的只有4个:make_heap();.pop_heap();.push_heap();.sort_heap(); 他们的头文件函数是#include < ...

  3. CCTableView的使用和注意事项

    #include "cocos-ext.h" using namespace cocos2d::extension; class TableViewTestLayer: publi ...

  4. 使用 Feedly RSS阅读器订阅技术大牛的博客

    这几天一直都在自己看书,可是书上面的东西都比较落后一点,而且没有大牛博文上的东西讲的深入,可是来回跳转各位大牛的博客又非常的麻烦,有一些公众账号虽然也会推荐一些知识内容,可是你应该有过看到多个公众号发 ...

  5. ArcGIS Server 10.2 实战(二)动态修改要素数据的地理处理服务

    上一篇<ArcGIS Server 10.2 实战(一)Asp.net MVC与JSON数据妙用实现动态生成要素图层>介绍了如何用JSON转要素的地理处理服务,实现了动态创建点要素并加载到 ...

  6. Linux 通过 load average 判断服务器负载情况

    Linux中load average判断服务器负载情况 转载文章 http://www.111cn.net/sys/linux/56003.htm 写的比较详细,推荐看看.

  7. 未能加载文件或程序集“Oracle.DataAccess”或它的某一个依赖项.试图加载格式不正确的程序

    .NET:Microsoft Visual Studio 2010 + .NET Framework 3.5 操作系统:windows2008 R2 64 位操作系统 oracle数据库:32位的OD ...

  8. AI 对不起 我还爱着你

    艾弗森,对不起,我还爱着你.有时候我自己都不知道自己我怎么了,直到最后才发现,我还爱着你. 那天起,我认识了你,便一发不可收拾.这些天,谢谢你,似乎因为你的影响让我改变了,坚持了许多.致以至今我才发现 ...

  9. MyBatis(3.2.3) - Handling enumeration types

    MyBatis supports persisting enum type properties out of the box. Assume that the STUDENTS table has ...

  10. 【MINA】缓存区ByteBuffer和IOBuffer你要了解的常用知识

    mina中IOBuffer是Nio中ByteBuffer的衍生类,主要是解决Bytebuffer的两个不足 1.没有提供足够灵活的get/putXXX方法 2.它容量固定,难以写入可变长度的数据 特点 ...