我们知道,当使用第三方的代码时,人家有可能会扔个Lib文件给你.这时候,别人仅仅要提供header文件给你,则你就能够通过Lib文件及header的函数声明,对Lib中的函数进行调用.在Keil中假设使用ARMCC调用Lib文件,相信大家都能从网上找到方法.那假设在Keil中使用GCC来链接第三方GCC编译好的Lib文件——".a"应该怎样呢?

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

Keil5.15使用GCC编译器编译STM32project,里面有交大家配置方法.

接下来,将project配置成生成库方式.这个跟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"文件.接着,我们就要在另外个project引用这个库文件了.

将"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

Keil5.15使用GCC编译器链接.a库文件的更多相关文章

  1. 折腾gcc/g++链接时.o文件及库的顺序问题

    gcc/g++链接时.o文件以及库的顺序问题 1 写在前面 最近换了xubuntu12.4,把原来的项目co出来编译的时候报"undefined reference to".猜测是 ...

  2. gcc/g++链接时.o文件及库的顺序问题

    折腾gcc/g++链接时.o文件及库的顺序问题 链接静态库的顺序问题 GCC 编译使用动态链接库和静态链接库--及先后顺序----及环境变量设置总结

  3. 折腾gcc/g++链接时.o文件及库的顺序问题(转)

    转自: http://www.cnblogs.com/OCaml/archive/2012/06/18/2554086.html#sec-1-1 折腾gcc/g++链接时.o文件及库的顺序问题 Tab ...

  4. linux下 GCC编译链接静态库&动态库

    静态库 有时候需要把一组代码编译成一个库,这个库在很多项目中都要用到,例如libc就是这样一个库, 我们在不同的程序中都会用到libc中的库函数(例如printf),也会用到libc中的变量(例如以后 ...

  5. 程序中引入库文件的头文件 编译时并不需要显示的用gcc去链接他的库文件 why?

    拿一个苹果系统下的c文件为例: testArr.c #include <stdio.h> int main() { , , , , }; printf(]); } 当我们编译的时候  一般 ...

  6. C语言头文件、库文件的查找路径

    在 程序设计中,文件包含是很有用的.一个大的程序可以分为多个模块,由多个程序员分别编程.有些公用的符号常量或宏定义等可单独组成一个文件,在其它文件的开头用包含命令包含该文件即可使用.这样,可避免在每个 ...

  7. gcc ld 链接器相关知识,调试指令(程序员的自我修养----链接、装载与库)

    最近解决一个动态链接上的问题,因为以前从来没有接触过这方面的知识,所以恶补了一下,首先要了解gcc编译指令(makefile),ld链接器的选项(还有连接脚本section指定内存位置),熟悉查看连接 ...

  8. gcc编译器创建和使用静态库、动态库

    http://www.cnblogs.com/dyllove98/archive/2013/06/25/3155599.html 目录树结构: test/include/hello.h #ifdef ...

  9. Linux gcc链接动态库出错:LIBRARY_PATH和LD_LIBRARY_PATH的区别

    昨天在自己的CentOs7.1上写makefile的时候,发现在一个C程序在编译并链接一个已生成好的lib动态库的时候出错.链接命令大概是这样的: [root@typecodes tcpmsg]# g ...

随机推荐

  1. the user must supply a jdbc connection 错误解决方法

    转自:https://blog.csdn.net/actionzh/article/details/54200451 今天在配置hibernate之后,进行添加数据测试时,运行中报出了 the use ...

  2. Spring Boot 特性 —— SpringApplication

    转自:https://blog.csdn.net/cqdz_dj/article/details/52910317

  3. POJ 2976 裸的01分数规划

    题意:给你n个数对(认为是a数组和b数组吧),从中取n-m个数对,如果选第i个数对,定义x[i]=1,求R=∑(a[i]*x[i])/∑(b[i]*x[i])取得最大值时R的值.输出R*100(保留到 ...

  4. 3.sql基础

    sql语句是和dbms交谈专用的语句,不同dbms都认sql语法 sql语句中字符串用单引号 sql语句是大小写不敏感的,不敏感指的是sql关键字,字符串值还是大小写敏感的 创建表.删除表不仅可以手工 ...

  5. SQLServer2008 使用BCP导入导出表数据

    --先开启cmdshell EXEC sp_configure 'show advanced options', 1 GO RECONFIGURE GO EXEC sp_configure 'xp_c ...

  6. Bootstrap中container与container-fluid的区别

    /*0-768px以上宽度container为100%*/ .container { padding-right: 15px; padding-left: 15px; margin-right: au ...

  7. Maven项目pom.xml配置详解

    maven项目pom.xml文件配置详解,需要时可以用作参考: <project xmlns="http://maven.apache.org/POM/4.0.0" xmln ...

  8. jsp连接MySQL实现登录

    1.下载驱动,并把jar包放到Tomcat的lib目录下 下载连接 2.把jar包添加到项目中 3.登录页面 <%@ page language="java" content ...

  9. C# Datetime 使用详解

    获得当前系统时间: DateTime dt = DateTime.Now; Environment.TickCount可以得到“系统启动到现在”的毫秒值 DateTime now = DateTime ...

  10. 用JSP实现动态交互

    一.什么是JSP? 1.在HTML中嵌入Java脚本代码 2.由应用服务器中的JSP引擎来编译和执行嵌入的Java脚本代码 3.然后将生成的整个页面信息返回给客户端   二.为什么需要基于B/S技术的 ...