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

我们知道,当使用第三方的代码时,人家有可能会扔个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

在这里插入图片描述

  • 2
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值