问题描述
我正在研究open62541开源项目。我已经在下面的网页open62541.org中使用Cmake构建了该项目,并在项目的build文件夹中生成了open62541.c和open62541.h文件。然后我在构建文件夹中创建了一个名为 C_project 的新文件夹,并将生成的文件复制到该文件夹中。
现在,我尝试按照下一页open62541/sever中给出的步骤来构建最小的服务器(C_Project / myServer.c)。我遇到以下链接错误。
C:\SPB_Data\open62541\build\C_Projects\OPC_UA>cmd /c gcc -std=c99 open62541.c myServer.c -lws2_32 -o myServer.exe > output.txt
C:\Users\PAVAN-~1\AppData\Local\Temp\cc1s9pOw.o:myServer.c:(.text+0x98): undefined reference to `__imp_UA_ServerConfig_setMinimalCustomBuffer'
C:\Users\PAVAN-~1\AppData\Local\Temp\cc1s9pOw.o:myServer.c:(.text+0xd8): undefined reference to `__imp_UA_Log_Stdout'
C:\Users\PAVAN-~1\AppData\Local\Temp\cc1s9pOw.o:myServer.c:(.text+0x132): undefined reference to `__imp_UA_Server_new'
C:\Users\PAVAN-~1\AppData\Local\Temp\cc1s9pOw.o:myServer.c:(.text+0x146): undefined reference to `__imp_UA_Server_getConfig'
C:\Users\PAVAN-~1\AppData\Local\Temp\cc1s9pOw.o:myServer.c:(.text+0x165): undefined reference to `__imp_UA_Server_run'
C:\Users\PAVAN-~1\AppData\Local\Temp\cc1s9pOw.o:myServer.c:(.text+0x178): undefined reference to `__imp_UA_Server_delete'
collect2.exe: error: ld returned 1 exit status
我使用以下命令来构建项目:
$ gcc -std=c99 open62541.c myServer.c -o myServer
我试图通过在网上搜索找到解决方案。我唯一可以摆脱的是由于dll文件而导致的错误。请帮助。
解决方法
-open62541.lib
指定应将编译结果写入文件 pen62541.lib
。
-o myServer.exe
说应该将其写入myServer.exe
。
然后GCC将忽略第一个输出文件名。
解决方案:从库名称中删除-
。
当我使用 BUILD_SHARED_LIBS 进行 CMake 构建时,我遇到了与您类似的问题。 对我来说,当我使用 CMake 选项 UA_ENABLE_AMALGAMATION 和 UA_NAMESPACE_ZERO full(默认设置)安装 open62541 时,它正在工作
我用命令编译
gcc -std=c99 myserver.c open62541.c -o server -lws2_32
所选文件夹内只有文件 open62541.c/.h 和 myserver.c