【零】基于open62541项目编译支持STM32平台的单独的open62541源文件和头文件
本篇文章于 2020 年 6 月 左右完成,但是没有发布出去,本文中涉及到的代码可能已经发生变化,请以官方代码仓库为准
前面的源代码下载跟编译 Windows 下面的 源文件一样,就不再重复了
Windows 下编译生成 .c
和 .h
文件
windows 平台需要的软件:cmake
、python
以及 visual studio
。
编译可以使用 cmake 的命令行形式进行编译,也可以使用 gui 形式编译,我为了好看,就用 gui 进行编译。
进来先选择源码目录,然后选择编译保存目录,然后点 configure 选择 visual studio 进行编译配置,默认即可。
完成后根据自己需要进行配置。此处,我进行了如下配置。
其中,蓝色框为必选,然后面无法生成 .c
和 .h
的单独文件。然后注意下面的 UA_ARCHITECTURE
需要选择 freertosLWIP
,不然后面生成 .c
和 .h
的无法在 FREERTOS LWIP
平台上运行。然后再次点击 configure 即可。
然后会询问你是否使用 freertos 自己的内存管理函数,就是 malloc、free、等函数的。我选择的是。
然后没问题之后,点击 generate 进行生成 visual studio 的项目文件。
生成过程很快,不过有提示。在生成单个文件之前,可以用 visual studio 打开,可以在 example 中看到很多的例程,比如下面这个直接生成官方服务器的例程。
当然,这是调用的单个的 open62541 的文件,server.cpp
则是通过调用编译生成的 open62541.c
和 open62541.h
文件来建立服务器的。
但此时的单文件还没生成,需要我们采用打开项目工程的方式打开刚刚编译目录。
打开之后,解决方案资源管理器如下所示。
此时可以看到已经有 open62541 的源文件的头文件了,我们可以打开看一下。
会发现会提示找不到这俩文件,这是因为我们还没生成,所以不清楚的同学可以先看看。接下来我们就生成单独的源文件和头文件。
其实也很简单,直接在解决方案上右键,然后选择生成解决方案即可。
可以看到编译会报错,并且文件前面的图示也没有改变。这个错误我们不需要去管它,完了之后,我们直接打开源文件和头文件,可以发现其实它们已经是生成了的。
至此,在 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服务器搭建
作者:丶吃鱼的猫
出处:https://www.cnblogs.com/eatfishcat/p/15789859.html
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出, 原文链接 如有问题, 可站内留言咨询.