在使用Mingw下运行g++时出现重要链接错误。

11

我有一个简单的socket程序,想在Win8系统上使用mingw中的g++进行编译。但是我遇到了常见的链接错误。

undefined reference to `__imp_socket'
undefined reference to `__imp_gethostbyname'

我已尝试添加-lws2_32,但没有成功;即它仍然找不到引用。有人能建议我是否还遗漏了其他内容吗?
以下是完整输出:
G:\source\kak>g++ -o ./test_client -lws2_32 test_client.C
C:\Users\kenkahn\AppData\Local\Temp\ccDZTr9b.o:test_client.C:(.text+0x4f): undefined reference to `__imp_inet_addr'
C:\Users\kenkahn\AppData\Local\Temp\ccDZTr9b.o:test_client.C:(.text+0x6b): undefined reference to `__imp_socket'
C:\Users\kenkahn\AppData\Local\Temp\ccDZTr9b.o:test_client.C:(.text+0x8b): undefined reference to `__imp_connect'
d:/program files/mingw/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/4.8.1/../../../../x86_64-w64-mingw32/bin/ld.exe: C:\Users\kenkahn\AppData\Local\Temp\ccDZTr9b.o: bad reloc address 0xc in section `.xdata'
collect2.exe: error: ld returned 1 exit status

请在选项中添加-v,并发布您的g++命令输出。同时,请注意,“最新版本”对于gcc或MinGW并不是非常有帮助,因为这些软件有许多不同的来源。例如,看起来您正在使用gcc 4.8.1 - 我安装了一个带有gcc 4.8.2的MinGW。 - Michael Burr
1个回答

21

尝试在test_client.C参数之后加上-lws2_32。gcc的链接器(ld)对可链接的内容顺序比较挑剔,这可能是它在链接时找不到导入函数的原因。


2
如果这个答案解决了您的问题,请点击“接受”(绿色勾号)。 - ollo
我在这上浪费了半个小时,如果没有你的回答,可能还要再争斗一个小时。谢谢。 - Leogout

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接