walker2048 发表于 2024-8-12 21:50

「星闪体验教程」2、如何添加第三方库(比如nanopb)

<div class='showpostmsg'><p>我们在做项目的时候,通常会使用到一些开源的第三方库,那如何将第三方库添加进来,并正确编译呢?步骤大致如下图:</p>

<p>&nbsp;</p>

<div style="text-align: center;"></div>

<p>&nbsp;</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下的 &#39;ram_component&#39; 属性,然后添加对应的组件即可</p>

<p>&nbsp;</p>

<div style="text-align: center;"></div>

<p>&nbsp;</p>

<p>完成这些操作后,就可以重新编译固件了,编译完成后,可以看到map文件里已经有nanopb的相关函数和对应符号。</p>

<p>&nbsp;</p>

<div style="text-align: center;"></div>

<p>&nbsp;</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]
查看完整版本: 「星闪体验教程」2、如何添加第三方库(比如nanopb)