今日は open62541 のサーバーのサンプルを MinGW で動かす。
ファイル構成はこんな感じとする
./ ├ open62541 // git clone https://github.com/open62541/open62451 でとってきたファイル群 └ myServer.c // 今回動かすサーバーサンプル
まずは ライブラリをビルド
git clone https://github.com/open62541/open62541 cd open62541 mkdir build cd build cmake .. -G "MSYS Makefiles"
※ MINGW Makefiles
を使うとなぜかエラーになったので、 MSYS Makefiles
を使った
プロジェクトルートに戻って、 myServer.c
を作成する
#include <open62541/plugin/log_stdout.h> #include <open62541/server.h> #include <open62541/server_config_default.h> #include <signal.h> #include <stdlib.h> static volatile UA_Boolean running = true; static void stopHandler(int sig) { UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND, "received ctrl-c"); running = false; } int main(void) { signal(SIGINT, stopHandler); signal(SIGTERM, stopHandler); UA_Server *server = UA_Server_new(); UA_ServerConfig_setDefault(UA_Server_getConfig(server)); UA_StatusCode retval = UA_Server_run(server, &running); UA_Server_delete(server); return retval == UA_STATUSCODE_GOOD ? EXIT_SUCCESS : EXIT_FAILURE; }
んで、ビルド。include するディレクトリが多いので注意が必要なのと、mingwの場合は ws2_32 の指定が必要。というか、Windowsだったら、ws2_32の指定が必要なのかな。
gcc -I ./open62541/include -I ./open62541/plugins/include -I ./open62541/build/src_generated -I ./open62541/arch -I ./open62541/deps -L ./open62541/build/bin -std=c99 myServer.c -lopen62541 -lws2_32 -o myServer
これで、myServer.exe が出来上がる。
このサンプルでは、オリジナルのノードデータを追加していないので、クライアントから見えるのはサーバーのシステム情報ノードのみ。