RDA8910(4GCAT1)CSDK二次开发:13、将你的代码藏起来----编译静态库

目录

点击这里查看所有博文

  本系列博客所述资料均来自合宙官方,并不是本人原创(只有博客是自己写的),csdk只是得到了口头的允许公开授权。出于热心,本人将自己的所学笔记整理并推出相对应的使用教程,方面其他人学习。为国内的物联网事业发展尽自己的一份绵薄之力,没有为自己谋取私利的想法。若出现侵权现象,请告知本人,本人会立即停止更新,并删除相应的文章和代码。

  本系列博客基于紫光展锐的RDA8910 LTE Cat 1 bis芯片平台开发。理论上适用于合宙的Air720U、Air724U、广和通L610以及安信可的cat-01模块。

  各个厂家的部分配置文件可能不一样,也许会导致设备出现奇怪的问题,其他的模块我也不确定能不能用,自行测试。但是有一点编译下载和监视流程基本一样,可供参考。

  先不管支不支持,如果你用的模块是是紫光展锐的RDA8910,那都不妨一试,也许会有意外收获(也有可能变砖,慎重!!!)。

  我使用的是Air724UG开发板,如果在其他模块上不能用,那也不要强怼,也许是开发包不兼容吧。这里的代码是没有问题的。例程仅供参考!

一、前言

  有的小伙伴也许遇到过下面这个问题。就是自己写了一套很好用的库文件,自己用着也很顺手。现在想把它分享出去也给别人用用。但是这个代码库有一部分是利用的别人不开源的代码(正当渠道获得,只是别人不开源),又或者有什么其他的原因,导致这个代码库不便直接公开。

  但是又由于自己的助人为乐之心瘙痒,以至于久久不能寐,连续失眠好几天,非常难受。

在这里插入图片描述

  如果你用的是CSDK开发,那么现在!这个问题将不复存在。

在这里插入图片描述

  你猜的没错,我又带着解决办法来了,让你可以有办法将自己的代码库编译成静态库文件,提供给其他人使用。而他又看不到代码,方便了他人也方便了自己。

在这里插入图片描述

  本篇教程和C语言关系不是很大,主要是CMAKE的相关应用,不会的话也没关系,下面提供代码,直接套工程模板即可。

二、编写各种代码

2.1、工程构建

  在demo文件夹中新建一个demo为StaticLibrary,在StaticLibrary文件夹内新建一个HelloWorld文件夹。
在这里插入图片描述

  在HelloWorld文件夹内新建一个inc存放头文件、一个src存放源文件、一个lib存放库文件。如果看不懂我讲什么,先去参考一下其他的demo工程。

在这里插入图片描述

2.2、编写cmake

  将StaticLibrary文件夹内的cmake文件改成如下内容。主要是根据条件判断是应该编译库文件还是编译工程文件。
在这里插入图片描述

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文件改成如下内容。主要是添加源文件路径、添加头文件路径、添加外部头文件路径、生成静态库、指定静态库生成位置。
在这里插入图片描述


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文件并添加如下代码,什么源文件内的函数。

#ifdef HELLO_WORLD_H
#define HELLO_WORLD_H
void HelloFunc();
#endif

  在src目录下新增HelloWorld.c文件并添加如下代码。就做了一件事不停的helloworld


#include <stdio.h>
#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宏定义确定当前编译器应该执行什么动作。

/***************
	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");
}

三、开始编译

  以上工作就绪后,就可以开始编译了,有的同学可能还没看完我下面要说的就跑去编译了。那么结果就是编译失败,在网上找半天都找不到解决方案。错误就是找不到库文件!!!

在这里插入图片描述

在这里插入图片描述

  那么这里我要提醒一下,如果是自己新建的工程,在HelloWorld/lib里面是没有库文件的,需要自己编译一下库文件才可以编译工程。如果是SDK提供的例程那里面就会有一个库文件可以直接用。

  那么问题来了怎么才能编译出来库文件呢。
在这里插入图片描述

  很简单只要把将StaticLibrary文件夹内的cmake文件中的set(HelloLibGen OFF)这一行改成set(HelloLibGen ON),然后再去运行编译那么就会在HelloWorld/lib目录下生成一个静态库libHelloWorld.a。静态库编译完成之后,就可以将C文件删除了,别人就可以直接用你生成的静态库了,头文件不能删除

在这里插入图片描述
在这里插入图片描述
  然后呢,再把set(HelloLibGen ON)改回set(HelloLibGen OFF),最后去编译试试。看看是不是编译成功了。至于那个警告无视它就可以了。

在这里插入图片描述

四、下载验证

  运行一切正常,没有问题。
在这里插入图片描述

不会下载的点击这里,进去查看我的RDA8910 CSDK二次开发入门教程专题第一篇博文1、RDA8910CSDK二次开发:环境搭建里面讲了怎么下载
这里只是我的学习笔记,拿出来给大家分享,欢迎大家批评指正,本篇教程到此结束

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

遇雪长安

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值