链接器错误LNK2019对__imp_的未定义引用

问题描述

我正在研究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

Linker errors

我使用以下命令来构建项目:

$ 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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...