赞
踩
这些时间一直在进行OPCUA服务器代码的学习,一开始最麻烦的是进行在gethub上下载下来open62541的开源项目进行.c和.h的生成,由于本人在window下生成的.c和.h文件在项目移植到ubuntu下后出现了下图所示错误。
最后定位错误为在gethub网站下载的代码缺少部分代码和使能,导致.h中的函数无法定位到.c文件中的函数引发的错误。最后还是在ubuntu下编译工程文件后使用其.c和.h文件才使得代码顺利生成.o文件
sudo apt-get install cmake-qt-gui
使用以下命令去下载源码(在终端中输入,文件下载在运行终端的目录下)
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
,生成以下文件,
这里解释下cmake的命令行中的UA_ENABLE_AMALGAMATION选项,这是open62541的CMakeLists.txt提供的选项,专门用于生成single distribution版本的open62541,即open62541.c 和 open62541.h文件,方便用于集成到其它程序里。
在bin目录下生成的是open62541的静态库,可以用于和别的程序进行链接。
也就是说open62541的CMakeLists.txt提供了2种调用方式:
我们在别的地方建立一个目录runDemoOpen62541,然后把libopen62541.a 和open62541.h拷贝进来,然后在这个目录下创建bin和build目录,创建server.c(也可以是自己写的demo),client.c(也可以是自己写的demo)和CMakeLists.txt,整体结构如下,
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,
我们在别的地方建立一个目录runDemoOpen62541,然后把open62541.c 和open62541.h拷贝进来,然后在这个目录下创建bin和build目录,创建server.c(也可以是自己写的demo),client.c(也可以是自己写的demo)和CMakeLists.txt,整体结构如下,
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,
open62541在windows下使用CMake编译生成open62541.h和open62541.c文件会缺少一些函数导致工程无法编译,可以在linux下编译.c和.h文件后拷贝到windows下使用。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。