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

版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

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

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

keil查看各个文件所占资源

1.打开keil工程,双击红色框框,就会跳出*.map的文件    2.或者在生成文件中找到*.map也可以 3.下面我们来分析下生产的map文件 ========================...

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

CSDN日报20170828——《4个方法快速打造你的阅读清单》

程序人生 | 4个方法快速打造你的阅读清单作者:foruok 下面提供四种方法,无论你是否经常读书,都可以使用它们快速构建起你的阅读清单: 从问题到图书 信息缺口 关联 跟...

4个方法快速打造你的阅读清单

一看就会的4种找书方法,从此告别“该读什么”的苦恼
  • foruok
  • foruok
  • 2017-08-28 07:18
  • 5473

glibc安装

转载文章 ——安装glibc 有些软件可能要求系统的 Glibc 高于某个版本才可以正常运行,如果您的 Glibc 低于要求的版本,为了运行这些软件,您就不得不升级您的 Glibc了。比如...

libc、glibc和glib的关系

转自: http://my.oschina.net/moooofly/blog/126260 http://nieyong.github.io/wiki_ny/glibc,%20eglibc%...

gettimeofday 返回负值的问题

问题描述: 在一个线程函数中周期性执行下面的语句,一段时间后,"Now:"后面会出现负值,并一直保持是负值(虽然也在增加) timeval tv_now; gettimeofday(&tv_...

libc、glibc和glib的关系

转自:http://my.oschina.net/moooofly/blog/126260 【glibc 和 libc】  glibc 和 libc 都是 Linux 下的 C 函数库。  li...

如何区分动态语言和静态语言

转自:http://blog.roodo.com/rocksaying/archives/3530367.html 雖然我們總是說著動態語言(dynamic language)、靜態...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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