MinGW链接器错误:winsock

我在Windows上使用MinGW编译器来编译我的C ++应用程序与套接字。 我的连接命令如下所示:

g++.exe -Wall -Wno-long-long -pedantic -lwsock32 -o dist/Windows/piskvorky { there are a lot of object files } 

我也试过了

 g++.exe -Wall -Wno-long-long -pedantic -lws2_32 -o dist/Windows/piskvorky { there are a lot of object files } 

但在这两种情况下,我得到这个错误:

 build/Windows/MinGW-Windows/src/utils/tcpunit.o:tcpunit.cpp:(.text+0x33): undefined reference to `closesocket@4' build/Windows/MinGW-Windows/src/utils/tcpunit.o:tcpunit.cpp:(.text+0xd0): undefined reference to `send@16' build/Windows/MinGW-Windows/src/utils/tcpunit.o:tcpunit.cpp:(.text+0x1ee): undefined reference to `recv@16' build/Windows/MinGW-Windows/src/utils/tcpdevice.o:tcpdevice.cpp:(.text+0x184): undefined reference to `WSAStartup@8' build/Windows/MinGW-Windows/src/utils/tcpdevice.o:tcpdevice.cpp:(.text+0x1a5): undefined reference to `closesocket@4' build/Windows/MinGW-Windows/src/utils/tcpdevice.o:tcpdevice.cpp:(.text+0x1cb): undefined reference to `closesocket@4' build/Windows/MinGW-Windows/src/utils/tcpdevice.o:tcpdevice.cpp:(.text+0x1d3): undefined reference to `WSACleanup@0' build/Windows/MinGW-Windows/src/utils/tcpdevice.o:tcpdevice.cpp:(.text+0x6fe): undefined reference to `bind@12' build/Windows/MinGW-Windows/src/utils/tcpdevice.o:tcpdevice.cpp:(.text+0x724): undefined reference to `listen@8' build/Windows/MinGW-Windows/src/utils/tcpdevice.o:tcpdevice.cpp:(.text+0x7f0): undefined reference to `gethostbyaddr@12' build/Windows/MinGW-Windows/src/utils/tcpdevice.o:tcpdevice.cpp:(.text+0x83c): undefined reference to `socket@12' build/Windows/MinGW-Windows/src/utils/tcpdevice.o:tcpdevice.cpp:(.text+0x86f): undefined reference to `htons@4' build/Windows/MinGW-Windows/src/utils/tcpdevice.o:tcpdevice.cpp:(.text+0x8b5): undefined reference to `connect@12' build/Windows/MinGW-Windows/src/utils/tcpdevice.o:tcpdevice.cpp:(.text+0x9c6): undefined reference to `accept@12' 

你有什么想法可以解决问题吗?

-lws2_32放置在目标文件列表之后-lws2_32按照它们在命令行中出现的顺序search库和目标文件。

只是为了帮助其他观众:

 gcc hello.c -o hello.o -lws2_32 

在Eclipse中使用mingw:菜单 – 项目 – 属性 – c / c ++编译 – 设置:注册“工具设置” – MinGW C链接器 – 其他:下部“其他对象”add:“D:\ Programmierung \ mingw \ lib \ libwsock32.a“为例。 对于libwsock32.a,不需要任何其他条目,尤其是不在Library-entries中。 也没有关于这个Lib的标志。

在:

菜单 – 项目 – 属性 – c / c ++构build – 设置:注册“工具设置” – MinGW C ++链接器 – 其他:下部“其他对象”

MinGW的 bin文件夹中添加: libwsock32.a

问候我刚刚经历了上面的问题….

所以这里有一些观察首先….

我知道你指的是MinGw,但是你可能需要用cygwin来解决这个问题,我不知道mingw,我更了解cygwin。 但我知道他们是彼此的表亲。

Cygwin提供了预编译的boost库,但是谁知道它们是哪个版本。 我确定有可能检查,但谁有时间这样做? 我不链接到cygwin boost库,或者mingw boost库,我使用gcc在Windows(cygwin)上从头创build了boost。 编译没有问题。

在写这篇文章的时候,版本是1.47.0,我相信。

事实上,cygwin使用版本(x?)和boost是1.47.0可能是一个主要问题。 让你知道你正在使用的方式提升。

我使用boost 1.42开发的代码,并有相关的链接器错误。 代码编译,头被发现,etc ..等等…但是我得到了未定义的引用WSA等…等… opensocket这个,closures套接字,等….

因此,为了做networking套接字,显然需要一个平台库,在这个平台库中,以windows的ws2_32的forms被发现,而在linux下的套接字是肯定的。

因此,如果您正确使用boost,并且包括正确的boost系统库,那么您可能还需要一个操作系统特定的库来访问一些资源(在这种情况下是networking连接)。

链接器错误消失之后。 这可能是显而易见的提高退伍军人这里发生了什么,但我无法通过谷歌find明确的答案。