Toggle navigation
首页
(current)
问答
文章
话题
商城
登录
注册
13、RDA8910CSDK二次开发:将你的代码藏起来----编译静态库
csdk
cat1
RDA8910
静态库
二次开发
# 目录 [点击这里查看所有博文](https://blog.csdn.net/weixin_44570083/article/details/104285283) 本系列博客所述资料`均来自合宙官方`,并不是本人原创(只有博客是自己...
# 目录 [点击这里查看所有博文](https://blog.csdn.net/weixin_44570083/article/details/104285283) 本系列博客所述资料`均来自合宙官方`,并不是本人原创(只有博客是自己写的),csdk只是得到了`口头的允许公开授权`。出于热心,本人将自己的所学笔记整理并推出相对应的使用教程,方面其他人学习。为国内的物联网事业发展尽自己的一份绵薄之力,`没有为自己谋取私利的想法`。若出现侵权现象,请告知本人,本人会立即停止更新,并删除相应的文章和代码。 本系列博客基于紫光展锐的`RDA8910 LTE Cat 1` bis芯片平台开发。理论上适用于合宙的Air720U、Air724U、广和通L610以及安信可的cat-01模块。 各个厂家的部分配置文件可能不一样,也许会导致设备出现奇怪的问题,其他的模块我也不确定能不能用,自行测试。但是有一点`编译下载和监视流程基本一样`,可供参考。 先不管支不支持,如果你用的模块是是紫光展锐的RDA8910,那都不妨一试,也许会有意外收获(`也有可能变砖,慎重!!!`)。 我使用的是`Air724UG`开发板,如果在其他模块上不能用,那也不要强怼,也许是开发包不兼容吧。这里的代码是没有问题的。例程仅供参考! # 一、前言 有的小伙伴也许遇到过下面这个问题。就是自己写了一套很好用的库文件,自己用着也很顺手。现在想把它分享出去也给别人用用。但是这个代码库有一部分是利用的别人不开源的代码(正当渠道获得,只是别人不开源),又或者有什么其他的原因,导致这个代码库不便直接公开。 但是又由于自己的助人为乐之心瘙痒,以至于久久不能寐,连续失眠好几天,非常难受。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200725175952607.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDU3MDA4Mw==,size_16,color_FFFFFF,t_70) 如果你用的是CSDK开发,那么现在!这个问题将不复存在。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200725180356963.png) 你猜的没错,我又带着解决办法来了,让你可以有办法将自己的代码库编译成静态库文件,提供给其他人使用。而他又看不到代码,方便了他人也方便了自己。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200725175411189.png) 本篇教程和C语言关系不是很大,主要是CMAKE的相关应用,不会的话也没关系,下面提供代码,直接套工程模板即可。 # 二、编写各种代码 ## 2.1、工程构建 在demo文件夹中新建一个demo为`StaticLibrary`,在`StaticLibrary`文件夹内新建一个`HelloWorld`文件夹。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200725181130322.png) 在`HelloWorld`文件夹内新建一个inc存放头文件、一个src存放源文件、一个lib存放库文件。如果看不懂我讲什么,先去参考一下其他的demo工程。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200725181147379.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDU3MDA4Mw==,size_16,color_FFFFFF,t_70) ## 2.2、编写cmake 将`StaticLibrary`文件夹内的cmake文件改成如下内容。主要是根据条件判断是应该编译库文件还是编译工程文件。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200725181531546.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDU3MDA4Mw==,size_16,color_FFFFFF,t_70) ```c if(CONFIG_APPIMG_LOAD_FLASH) add_appimg(${target} ${flash_ldscript} demo_StaticLibrary.c) elseif(CONFIG_APPIMG_LOAD_FILE) add_appimg(${target} ${file_ldscript} demo_StaticLibrary.c) endif() set(HelloLibGen OFF) if(HelloLibGen) add_subdirectory(HelloWorld) else() add_definitions(-DHelloBuild) include_directories(./HelloWorld/inc) target_link_libraries(${target} PRIVATE ${PROJECT_SOURCE_DIR}/demo/${BUILD_TARGET}/HelloWorld/lib/libHelloWorld.a) endif() ``` 将`StaticLibrary\HelloWorld`文件夹内的cmake文件改成如下内容。主要是添加源文件路径、添加头文件路径、添加外部头文件路径、生成静态库、指定静态库生成位置。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200725181614737.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDU3MDA4Mw==,size_16,color_FFFFFF,t_70) ```c include_directories(../../../api/include) include_directories(./inc) aux_source_directory(./src DIR_SRCS) add_library(HelloWorld STATIC ${DIR_SRCS}) set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/demo/${BUILD_TARGET}/HelloWorld/lib) ``` ## 2.3、编写库文件 在inc目录下新增`HelloWorld.h`文件并添加如下代码,什么源文件内的函数。 ```c #ifdef HELLO_WORLD_H #define HELLO_WORLD_H void HelloFunc(); #endif ``` 在src目录下新增`HelloWorld.c`文件并添加如下代码。就做了一件事不停的`helloworld`。 ```c #include
#include "iot_debug.h" #include "iot_os.h" #include "HelloWorld.h" void HelloFunc() { for (int n = 0; n < 30; n++) { iot_debug_print("[LibHelloWorld]hello world %d", n); iot_os_sleep(1000); } } ``` ## 2.4、编写用户文件 准备工作就绪后,就要开始编写调用文件了,由于是使用一个demo完成静态库编译和静态库引用两个动作。这两者是不能同时存在的,所以需要加上条件编译。通过HelloBuild宏定义确定当前编译器应该执行什么动作。 ```c /*************** demo_StaticLibrary ****************/ #include "iot_debug.h" #include "iot_os.h" #ifdef HelloBuild #include "HelloWorld.h" #endif HANDLE demo_hello_task; static void demo_hello(PVOID pParameter) { #ifdef HelloBuild HelloFunc(); #endif iot_os_delete_task(demo_hello_task); } int appimg_enter(void *param) { iot_debug_print("[hello]appimg_enter"); demo_hello_task = iot_os_create_task(demo_hello, NULL, 1024, 1, OPENAT_OS_CREATE_DEFAULT, "hello"); return 0; } void appimg_exit(void) { iot_debug_print("[hello]appimg_exit"); } ``` # 三、开始编译 以上工作就绪后,就可以开始编译了,有的同学可能还没看完我下面要说的就跑去编译了。那么结果就是编译失败,在网上找半天都找不到解决方案。`错误就是找不到库文件!!!` ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200725182837941.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDU3MDA4Mw==,size_16,color_FFFFFF,t_70) ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200725183243165.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDU3MDA4Mw==,size_16,color_FFFFFF,t_70) 那么这里我要提醒一下,如果是自己新建的工程,在`HelloWorld/lib`里面是没有库文件的,需要`自己编译`一下库文件才可以编译工程。如果是SDK提供的例程那里面就会有一个库文件可以直接用。 那么问题来了怎么才能编译出来库文件呢。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200725183756305.png) 很简单只要把将`StaticLibrary`文件夹内的cmake文件中的`set(HelloLibGen OFF)`这一行改成`set(HelloLibGen ON)`,然后再去运行编译那么就会在`HelloWorld/lib`目录下生成一个静态库`libHelloWorld.a`。静态库编译完成之后,就可以将C文件删除了,别人就可以直接用你生成的静态库了,`头文件不能删除`。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200725183620765.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDU3MDA4Mw==,size_16,color_FFFFFF,t_70) ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200725183650656.png) 然后呢,再把`set(HelloLibGen ON)`改回`set(HelloLibGen OFF)`,最后去编译试试。看看是不是编译成功了。至于那个警告无视它就可以了。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200725183954770.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDU3MDA4Mw==,size_16,color_FFFFFF,t_70) # 四、下载验证 运行一切正常,没有问题。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/2020072518414446.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDU3MDA4Mw==,size_16,color_FFFFFF,t_70) > 不会下载的[点击这里](https://blog.csdn.net/weixin_44570083/article/details/104285283),进去查看我的`RDA8910 CSDK二次开发入门教程`专题第一篇博文`1、RDA8910CSDK二次开发:环境搭建`里面讲了怎么下载 > 这里只是我的学习笔记,拿出来给大家分享,欢迎大家批评指正,本篇教程到此结束
发表于 2020-07-25 19:21
阅读 ( 5424 )
0 推荐
收藏
你可能感兴趣的文章
1.1、RDA8910CSDK二次开发:CSDK极致开发体验
7750 浏览
12、RDA8910CSDK二次开发:c语言中最好用的JSON解析库---cJSON
6053 浏览
11、RDA8910CSDK二次开发:新鲜出炉的MQTT库
7889 浏览
10、RDA8910CSDK二次开发:简易的http通讯库
1829 浏览
9、RDA8910CSDK二次开发:趁热打铁干脆顺带把UDP通讯也给撸了吧
1871 浏览
相关问题
关于二次开发功能上的咨询
1 回答
0 条评论
请先
登录
后评论
陈夏
26 篇文章
作家榜
»
技术销售Delectate
43 文章
陈夏
26 文章
国梁
24 文章
miuser
21 文章
晨旭
20 文章
朱天华
19 文章
金艺
19 文章
杨奉武
18 文章
×
发送私信
发给:
内容:
×
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!