Keil5.15使用GCC编译器链接.a库文件

原创 2015年07月10日 11:49:45
我们知道,当使用第三方的代码时,人家有可能会扔个Lib文件给你.这时候,别人只要提供header文件给你,则你就可以通过Lib文件及header的函数声明,对Lib中的函数进行调用.在Keil中如果使用ARMCC调用Lib文件,相信大家都能从网上找到方法.那如果在Keil中使用GCC来链接第三方GCC编译好的Lib文件——".a"应该如何呢?

在告诉大家方法之前,我们写个简单的函数,然后用GCC编译器编译产生.a文件,便于我们进行测试.
首先,在Keil中配置gcc编译环境,这个可以参考我的文章.

Keil5.15使用GCC编译器编译STM32工程,里面有交大家配置方法.
接下来,将工程配置成生成库方式.这个跟Keil ARMCC的方式很像.
这里写图片描述
最后,写上自己测试代码.
库文件的NiipLib.c文件代码:

int NiipLib_GetValue(unsigned char* pBuffer,int nSize)
{
    int nIndex = 0;
    for(nIndex = 0;nIndex <nSize;nIndex++)
    {
            pBuffer[nIndex] = nIndex;
    }
    return nIndex;
}

库文件的NiipLib.h文件代码:

#ifdef __cplusplus
extern "C" {
#endif
int NiipLib_GetValue(unsigned char* pBuffer,int nSize); 

#ifdef __cplusplus
}
#endif
点击编译,我们可以在编译输出目录下得到"libNiipLib.a"文件.接着,我们就要在另外个工程引用这个库文件了.

将"libNiipLib.a"文件与"NiipLib.h"拷贝到自己新建的或者已存在的项目下面.下面图片的重点来了,请大家留意一下,开始"找不同"或者"大家来找茬".

这里写图片描述

细心的人,会发现为什么我"Include Libraries"这个地方,为什么填写的是"NiipLib"为什么不是"libNiipLib.a"?

其实,我开始也填写"libNiipLib.a",但编译器老提示无法找到"libNiipLib.a"这个文件.我真的想说FUCK.在网上搜索了一下,发现GCC有个变态的情况,叫做"隐式约定命名规则".

什么叫做"隐式约定命名规则"?用别人的解释

-ltest 表示要链接动态库libtest.a文件,这是gcc隐式约定命名规则,也就是库名带lib头,比如libtest.a,而在链接参数上则不带,比如-ltest就表示要链接libtest.a

而我的理解就是,你要调用什么.a文件,你只需去掉文件名前缀的"lib"及后缀的".a",就可以了。


测试结果:

这里写图片描述

来自:http://blog.csdn.net/lan120576664

相关文章推荐

gcc链接静态库时对待.a文件和.o文件的不同

很多人都知道,gcc在链接静态库时是从前往后找符号。因此如果一份文件foo引用了静态库bar.a,那么在链接命令中,bar.a必须放在foo的后面,也就是像gcc ... foo ... bar.a这...

gcc 使用静态库文件 链接库文件 .a makefile .so

上篇文章说了如何生成静态库文件:http://blog.csdn.net/lanmanck/archive/2009/10/12/4659161.aspx这里也有篇文章说的很好:http://wick...
  • lanmanck
  • lanmanck
  • 2009年10月12日 19:10
  • 11886

linux gcc 把静态链接库.a链接到动态链接库.so里

最近公司的项目中突然出现了这样一个需求,我简化再概括后如下:有两大模块,其中一个模块a最终编译出一个可执行文件exec_a,另一个模块b编译出一个动态链接库lib_b.so被模块a的程序exec_a所...

从iar移植到Keil,keil编译错误,.a文件

问题: assembling libmpllib.a... ....\Drivers\eMPL\mpl\libmpllib.a(1): error:A1167E: Invalid line star...

armcc

ADS提供下面的命令行开发工具: armcc armcc是ARM C编译器。这个编译器通过了Plum Hall C Validation Suite为ANSI C的一致性测试。armcc用于将用A...

Keil 下生成LIB库文件以及如何使用LIB库文件

Keil 下生成LIB库文件以及如何使用LIB库文件

keil编译链接过程以及ARMCC、ARMASM、FROMELF、ARMLINK、ARMAR的使用

1keil5 MDK的编译工具 2各工具用法 armarexe fromelfexe armccexe armlinkexe armasmexe 3自己写一个makefile文件进行make 4s...

交叉编译工具链

交叉编译工具链 交叉编译就是在一种平台上编译出能运行在体系结构不同的另一种平台上的程序,比如在PC平台(X86 CPU)上编译出能运行在以ARM为内核的CPU平台上的程序,编译得到的程序...

Keil5.15使用GCC编译器编译STM32工程

我们使用Keil一般使用ARMCC编译MCU工程代码.其实,Keil也是支持内嵌GCC编译器的.我们可以使用GCC来编译我们的工程代码. 下载GCC编译器GCC编译器下载地址 安装GCC我们可以把G...

在Keil中使用GCC工具链

摘自http://lishutong.me/1170.html   最近对GCC有些兴趣,想使用GCC工具链来编译ARM代码。首先想到的是Eclipse+GCC,但实际使用发现其安装和配置比较复杂...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Keil5.15使用GCC编译器链接.a库文件
举报原因:
原因补充:

(最多只允许输入30个字)