我试图进入 open62541 项目以在我的解决方案中使用它。我的平台是windows。
首先,我下载了发布文件(open62541.h/c)并使用 GCC 编译器(MinGW64)编译了服务器示例。
$ gcc -std=c99 open62541.c myServer.c -l"ws2_32" -o myServer
这样可行。所以我接下来的步骤是从 GitHub 获取最新的 master,并使用 CMAKE 构建它。我使用了以下 CMAKE 配置:
UA_NAMESPACE_ZERO Reduced 被使用,因为 FULL 会导致 CAMKE 无法生成项目:
CMakeLists.txt:1156 处的 CMake 错误(消息):找不到文件 C:/Users/lukasz/Desktop/open62541-visual/deps/ua-nodeset/Schema/Opc.Ua.NodeSet2.xml。您可能需要为 deps/ua-nodeset 初始化 git 子模块或设置 open62541_NODESET_DIR。
这将创建一个 .sln,而简单的构建全部创建 open62541.h/c。当我尝试使用生成的文件编译示例时,出现此错误:
> $ gcc -std=c99 open62541.c myServer.c -l"ws2_32" -o myServer
> C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe:
> C:\msys64\tmp\ccs27GQ8.o:myServer.c:(.text+0xa3): undefined reference
> to `__imp_UA_ServerConfig_setMinimalCustomBuffer'
> C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe:
> C:\msys64\tmp\ccs27GQ8.o:myServer.c:(.text+0xe3): undefined reference
> to `__imp_UA_Log_Stdout'
> C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe:
> C:\msys64\tmp\ccs27GQ8.o:myServer.c:(.text+0x13e): undefined reference
> to `__imp_UA_Server_new'
> C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe:
> C:\msys64\tmp\ccs27GQ8.o:myServer.c:(.text+0x152): undefined reference
> to `__imp_UA_Server_getConfig'
> C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe:
> C:\msys64\tmp\ccs27GQ8.o:myServer.c:(.text+0x171): undefined reference
> to `__imp_UA_Server_run'
> C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe:
> C:\msys64\tmp\ccs27GQ8.o:myServer.c:(.text+0x184): undefined reference
> to `__imp_UA_Server_delete' collect2.exe: error: ld returned 1 exit
> status
是什么导致发布的文件出现这种差异?