OPCUA学习记录——open62541.c|open62541.h|open62541.a文件生成

这些时间一直在进行OPCUA服务器代码的学习,一开始最麻烦的是进行在gethub上下载下来open62541的开源项目进行.c和.h的生成,由于本人在window下生成的.c和.h文件在项目移植到ubuntu下后出现了下图所示错误。
OPCUA学习记录——open62541.c|open62541.h|open62541.a文件生成_第1张图片
最后定位错误为在gethub网站下载的代码缺少部分代码和使能,导致.h中的函数无法定位到.c文件中的函数引发的错误。最后还是在ubuntu下编译工程文件后使用其.c和.h文件才使得代码顺利生成.o文件
OPCUA学习记录——open62541.c|open62541.h|open62541.a文件生成_第2张图片

一、下载和安装CMake-gui

sudo apt-get install cmake-qt-gui

二、获取Open62541源码

使用以下命令去下载源码(在终端中输入,文件下载在运行终端的目录下)
git clone https://github.com/open62541/open62541.git

open62541还有一些子模块,当enable一些特殊功能时就需要他们了,例如namespace等,这个需要使用以下命令去下载(在上面下载源码后的源码根目录下操作)
git submodule update --init

三、编译

cd到源码根目录下,创建build目录,然后cd到build目录下,输入以下命令去调用cmake,
cmake .. -DUA_ENABLE_AMALGAMATION=ON
接着再运行make,生成以下文件,
OPCUA学习记录——open62541.c|open62541.h|open62541.a文件生成_第3张图片
这里解释下cmake的命令行中的UA_ENABLE_AMALGAMATION选项,这是open62541的CMakeLists.txt提供的选项,专门用于生成single distribution版本的open62541,即open62541.c 和 open62541.h文件,方便用于集成到其它程序里。

在bin目录下生成的是open62541的静态库,可以用于和别的程序进行链接。
编译2
也就是说open62541的CMakeLists.txt提供了2种调用方式:

  1. libopen62541.a + open62541.h
  2. open62541.c + open62541.h

四、运行自己的demo

  • 第一种方法(使用libopen62541.a和open62541.h)

    我们在别的地方建立一个目录runDemoOpen62541,然后把libopen62541.a 和open62541.h拷贝进来,然后在这个目录下创建bin和build目录,创建server.c(也可以是自己写的demo),client.c(也可以是自己写的demo)和CMakeLists.txt,整体结构如下,
    OPCUA学习记录——open62541.c|open62541.h|open62541.a文件生成_第4张图片
    CMakeLists.txt的内容如下:

cmake_minimum_required(VERSION 3.5)

project(demoOpen62541)

set (EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)

add_definitions(-std=c99)

link_directories (${PROJECT_SOURCE_DIR})

add_executable(server server.c)
target_link_libraries(server libopen62541.a)

add_executable(client client.c)
target_link_libraries(client libopen62541.a)

然后cd到build目录下,运行cmake .. && make,就会在bin目录下生成server和client这2个bin,

编译4

  • 第二种方法(使用open62541.c和open62541.h)

我们在别的地方建立一个目录runDemoOpen62541,然后把open62541.c 和open62541.h拷贝进来,然后在这个目录下创建bin和build目录,创建server.c(也可以是自己写的demo),client.c(也可以是自己写的demo)和CMakeLists.txt,整体结构如下,
OPCUA学习记录——open62541.c|open62541.h|open62541.a文件生成_第5张图片
CMakeLists.txt与第一种有所不同,内容如下,

cmake_minimum_required(VERSION 3.5)

project(demoOpen62541)

set (EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)

add_compile_options(-std=c99)

add_executable(server server.c open62541.c)

add_executable(client client.c open62541.c)

然后cd到build目录下,运行cmake .. && make,就会在bin目录下生成server和client这2个bin,
编译4

五、总结

open62541在windows下使用CMake编译生成open62541.h和open62541.c文件会缺少一些函数导致工程无法编译,可以在linux下编译.c和.h文件后拷贝到windows下使用。

你可能感兴趣的:(OPCUA学习记录——open62541.c|open62541.h|open62541.a文件生成)