大家好,我是无际。

不知道大家有没有看到过.lib为后缀名的文件。

我们用keil开发工具就可以把我们的.c文件生成.lib文件。

这样能达到以下目的:

1.不想让别人看到自己写的源代码,同时又想让他使用你的程序功能。

一般很多芯片原厂就是这样干的,比如说TI的蓝牙和Zigbee协议栈,虽然说是开源的,但是实际上你去看他们底层的代码,很多都是用这种方式加密的。

还有就是一些模块原厂提供模块给方案商用,比如说以前我用汉枫wifi模块的时候,他们核心的代码就是通过这种方式的。

还有就是做电子狗和导航产品的,他们那个地图库是100%加密的。

总结:一般核心技术就会这样去加密,菜鸡程序就不用加了,浪费情怀。

2.加快编译速度,比如说工程比较庞大的时候,如ST固件库,文件很多编译时间需要很长,如果打包成lib库,就能节约不少时间(网上看的,真实性自行考察)。

下面是用keil把我们代码生成.lib的方法,我用我们无际单片机编程的wifi报警主机项目按键功能模块举例。

2.建立一个空的工程,把你需要加密的文件添加进去。

把需要生成lib的.c文件添加进来,这我需要把我按键功能模块代码生成lib,所以添加hal_key.c。

2.打开keil的options for Target…设置。

3.选择Output选项,在该选项选择Create Library…lib

然后点ok,重新编译就行了,是不是贼简单?

4.编译没有错误以后,我们在工程目录下找到Objects文件夹。

5.我们可以看到有一个lib文件,就是我们刚刚编译生成的。

不知道大家发现没,怎么生成的名字不是hal_key而是wh01?

这个其实是根据你工程名字生成的,我们手动重命名就可以了。

6.把我们这个lib文件添加到需要用到按键功能的工程文件夹里。

这里需要注意的是,一般要把lib文件和对应.h头文件一起放到对应文件夹里面,别人使用你的函数功能,以及函数有什么参数,就是通过查看.h文件调用的。

通过hal_key.h文件,我大概知道这个源代码提供3个可以提供外部调用的函数。

一个是按键初始化hal_KeyInit(),无返回值,无形参。

一个是按键检测函数hal_KeyProc(),无返回值,无形参。

一个是函数指针注册函数hal_KeyScanCBSRegister。

如果我们需要给别人用的话,不要学我啥注释没有,我们是在视频教程里有讲每个函数的作用。

一定要有点注释,让别人知道怎么调用,有什么条件要求,不然光几个函数别人肯定一脸懵逼。

7.下面,我们就能正常使用hal_key.c的函数功能啦。

同时,别人也看不到你hal_key.c这个文件的源代码了。

最后还想跟大家说几句话。

别看封装lib代码很简单,实际是一门技术活。

主要体现在你的代码移植性写的好不好,如果移植性不好,会直接暴露你的水平。

我就碰到过很多模块厂的工程师封装以后,还需要用到全局变量来传递数据的,这种就是经验不足的人写出来的代码。

封装成lib不是什么技术,怎么能把你的代码封装完以后最小程度干涉别人的代码才是技术。

keil把源代码生成lib的方法相关推荐

  1. 在Keil C51下生成LIB库文件以及如何使用LIB库文件

      如何生成LIB库文件 1.首先准备好生成LIB库文件对应的.c和.h文件,在这里用到的.c和.h文件分别是: "reg303.h" "rjwf303_flash.h& ...

  2. 由.def文件生成lib文件[转]

    最近在学习curl库时,碰到一个问题,从官网上下载了一个lib版的,却发现只有.dll,没有lib文件,感觉很奇怪,google了之后才知道,原来库作者的用意是让用户自己生成lib文件,下载到的lib ...

  3. Keil MDK生成LIB库以及使用LIB库

    问题引出:为什么要做成lib库? 1.不想将自己写的源代码公开,但是同时库文件又需要让别人能够正常调用,那封装成lib的格式就是一个方法. 2.编译某些工程文件时非常耗时,像ST官方的库时,由于文件众 ...

  4. c++由动态库dll文件生成lib文件的方法

    很多动态库dll文件,并没有附带lib文件,因此就无法以静态加载的方式去使用.但是此问题也是有解决办法的,就是从dll文件去生成一个lib文件.下面就介绍如何将dll文件去生成对应的lib文件 1.生 ...

  5. VS生成DLL没有生成LIB文件的解决方法

    1.在所建工程上单击鼠标右键,在弹出的右键菜单中选择"添加-->新建项....---->模块定义文件",在该模块定义文件中写导出函数表,单击确定.然后在所建工程上单击鼠 ...

  6. C++调用.lib的方法

    C++调用.lib的方法 1. 隐式加载 1. 隐式加载链接,有三种方法: 1. LIB文件直接加入到工程文件列表中. 在VC中打开File View一页,选中工程名,单击鼠标右键,然后选中" ...

  7. 使用 AjaxManager 生成调用服务器端方法的 javascript 函数

    通过 AjaxManager, 我们可以方便的生成调用 WebService 或者一般处理程序的 javascript 函数, 这样就可以方便的在客户端调用. 本文更新: 2011-12-12: 去掉 ...

  8. 将自己的类封装为lib的方法

    前言: Windows API中所有的函数都包含在dll中,其中有3个最重要的DLL. (1)   Kernel32.dll 它包含那些用于管理内存.进程和线程的函数,例如CreateThread函数 ...

  9. linux中动态链接库用扩展名,Linux操作系统下动态库的生成及链接方法是什么?...

    Linux下动态库文件的扩展名为".so"(Shared Object).按照约定,所有动态库文件名的形式是libname.so(可能在名字中加入版本号).这样,线程函数库被称作l ...

最新文章

  1. 2021泰晤士世界大学排名公布,中国137所高校上榜!
  2. 详解CAPM的数学推导
  3. 安装python解释器
  4. byte数组转为string_String类
  5. 使用powershell 执行脚本,windows默认不允许任何脚本运行
  6. 阿克苏计算机考试成绩查询,阿克苏高考成绩查询系统2021
  7. iOS 使用NJKWebViewProgress做webview进度条(加载网页时获取加载进度)
  8. 算法 | golang 实现 key有序map
  9. ZED 视频 SVO 转换 其他格式
  10. 联想r480安全模式_thinkpad笔记本如何进入安全模式?
  11. 《Caffe Modle Zoo》
  12. 《计算机网络》——IEEE 802.11 无线局域网、无线局域网的分类、广域网、PPP协议、HDLC协议、链路层设备、冲突域和广播域
  13. 国科大学习资料--人工智能原理与算法-第七次作业解析(学长整理)
  14. 移动开发者周刊第一期
  15. 实现连续签到案例的可能(使用)
  16. STOP 0X0000007B蓝屏故障处理一例
  17. winrar去掉烦人的广告 亲测有效
  18. 微信小程序中裁剪图片以及压缩到指定尺寸并上传
  19. 智能车竞赛技术报告 | 智能视觉组 - 北京科技大学智能视觉组
  20. D. Unusual Sequences (数论,质因子分解,dp)

热门文章

  1. 清华学霸震撼演讲:拼尽所有力气,只为给梦想一个机会!
  2. Python 程序设计(第二版)董付国_清华大学出版社_习题答案与分析【针对8.4及其之前的】
  3. Matlab的size()函数
  4. 白平衡——图像处理中的一种增强技术
  5. 干货|你的Paper阅读能力合格了吗(硕士生版)
  6. 使用计算机视觉在钢铁平面上检测焊接缺陷
  7. 一文了解点特征直方图
  8. CentOS5.4 上将Python进行升级,已经解决yum不可用的问题(转载)
  9. Powershell获取当前机器的序列号用户名域
  10. 医疗信息安全再添新保障