【零】基于open62541项目编译支持STM32平台的单独的open62541源文件和头文件

本篇文章于 2020 年 6 月 左右完成,但是没有发布出去,本文中涉及到的代码可能已经发生变化,请以官方代码仓库为准

前面的源代码下载跟编译 Windows 下面的 源文件一样,就不再重复了

Windows 下编译生成 .c.h 文件

windows 平台需要的软件:cmakepython 以及 visual studio

编译可以使用 cmake 的命令行形式进行编译,也可以使用 gui 形式编译,我为了好看,就用 gui 进行编译。

image-20200603000031703

进来先选择源码目录,然后选择编译保存目录,然后点 configure 选择 visual studio 进行编译配置,默认即可。

image-20200603000212270

完成后根据自己需要进行配置。此处,我进行了如下配置。

image-20200603000359317

其中,蓝色框为必选,然后面无法生成 .c.h 的单独文件。然后注意下面的 UA_ARCHITECTURE 需要选择 freertosLWIP,不然后面生成 .c.h 的无法在 FREERTOS LWIP 平台上运行。然后再次点击 configure 即可。

image-20200603000505201

然后会询问你是否使用 freertos 自己的内存管理函数,就是 malloc、free、等函数的。我选择的是。

image-20200603000643133

然后没问题之后,点击 generate 进行生成 visual studio 的项目文件。

image-20200603000737205

生成过程很快,不过有提示。在生成单个文件之前,可以用 visual studio 打开,可以在 example 中看到很多的例程,比如下面这个直接生成官方服务器的例程。

image-20200606210325427

当然,这是调用的单个的 open62541 的文件,server.cpp 则是通过调用编译生成的 open62541.copen62541.h 文件来建立服务器的。

image-20200606210550346

但此时的单文件还没生成,需要我们采用打开项目工程的方式打开刚刚编译目录。

image-20200606210943365

image-20200606210857700

打开之后,解决方案资源管理器如下所示。

image-20200606211302530

此时可以看到已经有 open62541 的源文件的头文件了,我们可以打开看一下。

image-20200606211357558

会发现会提示找不到这俩文件,这是因为我们还没生成,所以不清楚的同学可以先看看。接下来我们就生成单独的源文件和头文件。

image-20200606211510110

其实也很简单,直接在解决方案上右键,然后选择生成解决方案即可。

image-20200606211628879

image-20200606211642885

可以看到编译会报错,并且文件前面的图示也没有改变。这个错误我们不需要去管它,完了之后,我们直接打开源文件和头文件,可以发现其实它们已经是生成了的。

image-20200606211808527

image-20200606211816302

至此,在 Windows 下为 FREERTOS LWIP 平台编译单独的源文件就已经完成了

Linux 下编译生成 .c.h 文件

进入源码目录,创建 build 目录,方便存放编译过程中产生的文件

cd open62541
mkdir build
cd build

执行 cmake 进行编译,其中,make 在 65% 左右会出现错误,不过不用担心,这是正常的。

cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo -DBUILD_SHARED_LIBS=OFF -DUA_ARCHITECTURE=freertosLWIP -DUA_ENABLE_AMALGAMATION=ON -DUA_ENABLE_PUBSUB=ON DUA_ARCH_FREERTOS_USE_OWN_MEMORY_FUNCTIONS=true -DUA_ARCH_ADD_FLAGS="-std=c99 -DUA_ARCHITECTURE_FREERTOSLWIP -D__REDLIB__ -DDEBUG -D__CODE_RED -D__USE_LPCOPEN -DCORE_M3 -O0 -g3 -Wall -c -fmessage-lengths=0 -fno-buildin -ffunction-section -m3 -mthumb -D__REDLIB__ -fstack-usage -specs=redlib.specs" ../

这是整个过程的编译信息

-- The C compiler identification is GNU 7.5.0
-- The CXX compiler identification is GNU 7.5.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found PythonInterp: /usr/bin/python (found version "2.7.17") 
-- Found Git: /usr/bin/git (found version "2.17.1") 
-- open62541 Version: 1.1.2-155-gee275e79
-- Architectures included in amalgamation: freertosLWIP
-- The selected architecture is: freertosLWIP
-- Test CC flag -std=c99
-- Performing Test flag_supported
-- Performing Test flag_supported - Success
-- Test CC flag -pipe
-- Performing Test flag_supported
-- Performing Test flag_supported - Success
-- Test CC flag -Wall
-- Performing Test flag_supported
-- Performing Test flag_supported - Success
-- Test CC flag -Wextra
-- Performing Test flag_supported
-- Performing Test flag_supported - Success
-- Test CC flag -Wpedantic
-- Performing Test flag_supported
-- Performing Test flag_supported - Success
-- Test CC flag -Werror
-- Performing Test flag_supported
-- Performing Test flag_supported - Success
-- Test CC flag -Wno-static-in-inline
-- Performing Test flag_supported
-- Performing Test flag_supported - Success
-- Test CC flag -Wno-overlength-strings
-- Performing Test flag_supported
-- Performing Test flag_supported - Success
-- Test CC flag -Wno-unused-parameter
-- Performing Test flag_supported
-- Performing Test flag_supported - Success
-- Test CC flag -Wc++-compat
-- Performing Test flag_supported
-- Performing Test flag_supported - Success
-- Test CC flag -Wformat
-- Performing Test flag_supported
-- Performing Test flag_supported - Success
-- Test CC flag -Wformat-security
-- Performing Test flag_supported
-- Performing Test flag_supported - Success
-- Test CC flag -Wformat-nonliteral
-- Performing Test flag_supported
-- Performing Test flag_supported - Success
-- Test CC flag -Wmissing-prototypes
-- Performing Test flag_supported
-- Performing Test flag_supported - Success
-- Test CC flag -Wstrict-prototypes
-- Performing Test flag_supported
-- Performing Test flag_supported - Success
-- Test CC flag -Wredundant-decls
-- Performing Test flag_supported
-- Performing Test flag_supported - Success
-- Test CC flag -Wuninitialized
-- Performing Test flag_supported
-- Performing Test flag_supported - Success
-- Test CC flag -Winit-self
-- Performing Test flag_supported
-- Performing Test flag_supported - Success
-- Test CC flag -Wcast-qual
-- Performing Test flag_supported
-- Performing Test flag_supported - Success
-- Test CC flag -Wstrict-overflow
-- Performing Test flag_supported
-- Performing Test flag_supported - Success
-- Test CC flag -Wnested-externs
-- Performing Test flag_supported
-- Performing Test flag_supported - Success
-- Test CC flag -Wmultichar
-- Performing Test flag_supported
-- Performing Test flag_supported - Success
-- Test CC flag -Wundef
-- Performing Test flag_supported
-- Performing Test flag_supported - Success
-- Test CC flag -fno-strict-aliasing
-- Performing Test flag_supported
-- Performing Test flag_supported - Success
-- Test CC flag -fexceptions
-- Performing Test flag_supported
-- Performing Test flag_supported - Success
-- Test CC flag -fstack-protector-strong
-- Performing Test flag_supported
-- Performing Test flag_supported - Success
-- Test CC flag -fstack-clash-protection
-- Performing Test flag_supported
-- Performing Test flag_supported - Failed
-- Test CC flag -mcet
-- Performing Test flag_supported
-- Performing Test flag_supported - Failed
-- Test CC flag -fcf-protection
-- Performing Test flag_supported
-- Performing Test flag_supported - Failed
-- Test CC flag -D_FORTIFY_SOURCE=2
-- Performing Test flag_supported
-- Performing Test flag_supported - Success
-- Could NOT find Sphinx (missing: SPHINX_EXECUTABLE) 
-- Could NOT find LATEX (missing: LATEX_COMPILER) 
-- Configuring done
-- Generating done
-- Build files have been written to: /home/xiaohe/github/open62541/build

执行完毕之后,整个编译过程就结束了,相比于 Windows 下图形界面的设置,Linux 下要简单的多,一行命令就搞定了。

既然已经生成了 FreeRTOS+Lwip 平台的源文件,下一步肯定就是移植到 stm32 上去了,参考【三】基于open62541的STM32平台OPCUA服务器搭建

posted @ 2022-01-11 20:04  丶吃鱼的猫  阅读(1948)  评论(3编辑  收藏  举报