我正在开发一个使用开源库的学习程序。它旨在在 Raspberry Pi(Raspbian Kernel)上运行。因为我打算也能够在 PLC 上加载它,所以我主要使用纯 C。库本身带有合适的头文件和 .c 文件。
当我在 Raspberry 上使用预安装的 GCC 编译器时,我的程序编译没有任何错误并且工作正常。现在我的问题来了:
我试图让这个项目使用安装了 MinGW 的 code::blocks IDE 在 Windows 上工作。我重新访问了该库并下载了 Windows 的 zip(显然是相同的头文件和 .c 文件,但还包括 .lib 和 .dll)。
我在项目中设置了搜索目录和链接器设置,并像往常一样将标题包含#include "header.h"
在相对路径中。它不能编译并且提供了很多multible definition
,first defined here
这通常表明错误的链接和包含。
当我试图识别其中一些定义时,我注意到导致错误的函数在 library.c 文件中定义了一次。在此 .c 文件的开头,它还包含一次标头。
简短的摘要:
这适用于 raspbian GCC:
$ gcc -sdt=c99 main.c library.c -o executable
但在 Windows IDE + MinGW 中出现错误
我错过了什么严重的事情吗?动态链接库只能由之后的可执行文件使用。我想也许libraby.c
会被library.lib
但如果我删除其中一个项目不知道这些功能。我还搜索了错误的内含物。我真的在这里知识的尽头,并且还搜索了对我有帮助的帖子,但这些帖子主要是“链接器路径在哪里”或“包含 .c 文件”。这似乎是一个我忽略的简单问题。
任何帮助都会得到帮助。如果需要,我会提供更多细节。谢谢!
编辑(2):
obj\Debug\open62541.o:open62541.c:(.text+0x3152a): undefined reference to `__imp_shutdown'
obj\Debug\open62541.o:open62541.c:(.text+0x3153f): undefined reference to `__imp_closesocket'
obj\Debug\open62541.o:open62541.c:(.text+0x315a7): undefined reference to `__imp_send'
obj\Debug\open62541.o:open62541.c:(.text+0x315b9): undefined reference to `__imp_WSAGetLastError'
.....
编辑 (3)
回答1!现在编译好了,谢谢大家。