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明确的答案。