本篇文章於 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服務器搭建