「星闪体验教程」2、如何添加第三方库(比如nanopb)
<div class='showpostmsg'><p>我们在做项目的时候,通常会使用到一些开源的第三方库,那如何将第三方库添加进来,并正确编译呢?步骤大致如下图:</p><p> </p>
<div style="text-align: center;"></div>
<p> </p>
<p>1、首先我们把第三方库下载好,放到open_source目录里,这里我是把源码放到open_source/nanopb/nanopb路径下(使用git submodule的方式)</p>
<p>2、从cjson目录里复制一个CMake配置文件,然后修改成以下内容。</p>
<pre>
<code>#===============================================================================
# @brief cmake file
# Copyright (c) HiSilicon (Shanghai) Technologies Co., Ltd. 2023-2023. All rights reserved.
#===============================================================================
set(COMPONENT_NAME "nanopb")
set(CMAKE_CJSON_SOURCE_DIR
${CMAKE_CURRENT_SOURCE_DIR})
set(SOURCES
${CMAKE_CJSON_SOURCE_DIR}/nanopb/pb_common.c
${CMAKE_CJSON_SOURCE_DIR}/nanopb/pb_decode.c
${CMAKE_CJSON_SOURCE_DIR}/nanopb/pb_encode.c
)
set(PUBLIC_HEADER
${CMAKE_CJSON_SOURCE_DIR}/nanopb
)
set(PRIVATE_HEADER
${CMAKE_CJSON_SOURCE_DIR}/nanopb
)
set(PRIVATE_DEFINES
GNU_SOURCE
HAS_EXCEPTIONS=0
HAVE_CONFIG_H
PB_ENABLE_MALLOC
)
# use this when you want to add ccflags like -include xxx
set(COMPONENT_PUBLIC_CCFLAGS
)
set(COMPONENT_CCFLAGS
-Wno-error=logical-op
-Wno-error=sign-compare
-Wno-error=jump-misses-init
-Wno-sign-compare
-Wno-jump-misses-init
-Wno-error=unused-parameter
-Wno-unused-parameter
-Wno-unused-but-set-variable
-Wno-error=unused-variable
)
set(WHOLE_LINK
true
)
set(MAIN_COMPONENT
false
)
build_component()</code></pre>
<p><span style="color:#e74c3c;">记得把set(LIB_OUT_PATH ${BIN_DIR}/${CHIP}/libs/wifi/${TARGET_COMMAND})这一行给删掉</span></p>
<p>3、修改上级目录的CMake配置文件(也就是open_source/CMakeLists.txt),添加这一行内容</p>
<pre>
<code>add_subdirectory_if_exist(nanopb)</code></pre>
<p>这样,就可以把nanopb这个库添加到构建系统了,光是这样还不够,我们还需要在配置文件里注册nanopb这个组件(启用组件),具体步骤如下图</p>
<p>1、打开配置文件build/config/target_config/ws63/config.py</p>
<p>2、找到ws63-liteos-app下的 'ram_component' 属性,然后添加对应的组件即可</p>
<p> </p>
<div style="text-align: center;"></div>
<p> </p>
<p>完成这些操作后,就可以重新编译固件了,编译完成后,可以看到map文件里已经有nanopb的相关函数和对应符号。</p>
<p> </p>
<div style="text-align: center;"></div>
<p> </p>
</div><script> var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;" style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
if(parseInt(discuz_uid)==0){
(function($){
var postHeight = getTextHeight(400);
$(".showpostmsg").html($(".showpostmsg").html());
$(".showpostmsg").after(loginstr);
$(".showpostmsg").css({height:postHeight,overflow:"hidden"});
})(jQuery);
} </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script>
页:
[1]