zoukankan      html  css  js  c++  java
  • Keil5.15使用GCC编译器链接.a库文件

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

  • 相关阅读:
    0302思考并回答一些问题
    0104 自下而上
    1203 有穷自动机的构造
    11 10我的评论
    1029 C语言文法翻译(2)
    1014 对编译程序的心得与总结
    我们小组的编译程序
    0921 词法分析程序
    0909 关于编译原理的思考
    数据库设计之数据库设计三大范式
  • 原文地址:https://www.cnblogs.com/cxchanpin/p/7092589.html
Copyright © 2011-2022 走看看