当前位置:   article > 正文

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

open62541.c

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

一、下载和安装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,生成以下文件,
编译1
这里解释下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,整体结构如下,
    编译3
    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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

然后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,整体结构如下,
编译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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

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

五、总结

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/运维做开发/article/detail/852184
推荐阅读
相关标签
  

闽ICP备14008679号