在调试DSP设备的时候,发现好多工程会把比较核心的代码生成静态库lib,代码运行的时候直接调用lib里面的相关函数就行。但是从外部是看不到lib库里面的内容的,这样通过静态库的方式实现对代码的加密。
在网上找了好久如何将函数生成静态库*.lib的方法,找到的资料都比较零散,看起来比较费劲,通过自己的摸索,终于验证成功了。下面将我的方法分享一下。
下面用到的相关工程全部已打包上传 https://download.csdn.net/download/qq_20222919/88583858
首先调试好需要生成lib库文件的工程,这里使用一个流水灯来演示。
main函数中调用流水灯函数,实现LED灯的各种显示效果。
leds.c文件中主要对LED灯使用到的端口进行初始化。
led_control.c文件中通过三个函数实现三种流水灯的效果。
在这个工程中需要将流水灯的控制方式打包,也就是要将led_control.c这个文件打包为lib库文件。
首先调试当前工程,确保函数功能都能正确执行。
下载运行,观察流水灯的现象,确保函数功能都正常。
接下来开始将led_control.c文件生成为库文件。
首先要新建一个工程,新建工程时注意单片机型号的选择。
在Advanced settings选项中将output type类型选为Static Library。
然后点击Finish按钮,创建新的工程。
新工程创建完成后,删除默认的main.c文件。
然后进入到当前工程文件夹中,将上一个工程中的led_control.c文件拷贝到当前工程文件夹中。
拷贝完成后,工程中就会自动出现led_control.c文件。
接下来还需要添加工程中需要的头文件,在工程上单击鼠标右键,选择Properties
然后在Include Options依次添加需要用到的头文件。
这里主要添加官方库中的头文件
最后还需要将上一个工程中leds这个文件夹路添加进来,因为需要生成lib库文件的这个led_control.c还需要依赖leds文件夹中的其他几个文件。
所以当前项目中就不需要再添加leds.h和led_control.h头文件了,直接引用上一个项目的文件路径就行。
添加完成之后编译工程,工程编译完成之后,在Debug文件夹中就会出现生成generate_led_lib.lib 文件。
接下来在新的工程中,就可以直接调用这个 lib文件了。
在ccs中直接复制一个刚才的流水灯工程
名字修改为call_led_lib
使用这个工程来调用刚才生成的lib库,在工程中直接删除led_control.c文件。
然后打开工程文件夹,将generate_led_lib工程中Debug文件夹里面生成的generate_led_lib.lib文件 复制到call_led_lib工程中的APP—leds文件夹中
相当于使用generate_led_lib.lib文件来代替刚才led_control.c文件的功能。
此时工程中就会自动将generate_led_lib.lib文件添加进去。
下来编译当前工程
工程编译成功,没有出现错误,说明刚才使用generate_led_lib.lib文件来代替led_control.c是成功的。
下载到单片机中执行,观察led闪烁现象,效果和waterfall_light工程执行的效果是一样的。
在工程中按住ctrl键单击display1、display2、display3这三个函数,发现这三个函数不能跳转。说明generate_led_lib.lib文件,已经成功的将这个三个函数封装起来了,只能调用,不能看到函数实现的具体过程。
这样通过静态库的方法,就可以对项目中的核心技术进行软件层面的加密。