C - windows函数(套接字)的编译错误

Posted

技术标签:

【中文标题】C - windows函数(套接字)的编译错误【英文标题】:C - compilation error for windows function(socket) 【发布时间】:2014-03-21 10:46:12 【问题描述】:

我正在 windows7 64bit 上开发 eclipse kepler。

我正在尝试使用 windows 功能套接字。这是代码的一部分 if((s = socket(AF_INET , SOCK_STREAM , 0 )) == INVALID_SOCKET) 但我有编译错误 - 未定义对“socket@12”的引用。 (socket 需要 ws2_32.lib)。

我在互联网上读到我可能需要添加-l,所以我这样做了,错误真的消失了。但现在我还有其他问题 -

13:23:35 **** Incremental Build of configuration Debug for project sc ****
Info: Internal Builder is used for build
g++ -l Ws2_32.lib -o sc.exe server.o 
c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: cannot find -lWs2_32.lib
collect2.exe: error: ld returned 1 exit status

当我添加-l 是一件好事吗? 我该如何解决它(我希望它在 64 位和 32 位上工作)?

【问题讨论】:

【参考方案1】:

错误并没有消失,链接器只是因为之前的错误而不再进入该阶段。

您正在尝试将文件“sc.exe”和“server.o”与库“-o”链接。 由于“sc.exe”不存在,您会收到错误消息。如果它已经存在,你会得到一个错误,即库“-o”不存在。

如果您阅读了您找到的全部信息,您会注意到您需要在“-l”之后给出要链接的库的名称,如“-lfoo”或“-l foo” .

documentation for the -l option is here。

【讨论】:

我按照你说的添加了,但是我得到了新的错误。 13:23:35 **** 项目 sc 的配置调试的增量构建 **** 信息:内部构建器用于构建 g++ -l Ws2_32.lib -o sc.exe server.o c:/mingw/bin/。 ./lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe:找不到-lWs2_32.lib collect2.exe:错误:ld返回1退出状态 @KobiGuetta 请阅读文档,包括用于 mingw 的文档。 我按照文档的说明进行了更改,但仍然无法正常工作。gcc -o client.exe client.o app.o -lWs2_32.lib c:/mingw/bin/../lib/gcc/ mingw32/4.8.1/../../../../mingw32/bin/ld.exe:找不到-lWs2_32.lib【参考方案2】:

我需要添加: minGW C 链接器:库 - Ws2_32

错误是我添加了 Ws2_32.lib 而不是 Ws2_32

【讨论】:

以上是关于C - windows函数(套接字)的编译错误的主要内容,如果未能解决你的问题,请参考以下文章

C 中的 Windows 套接字编程

Groovy 编译错误:无法识别的 Windows 套接字错误

C++ Linux 到 Windows 交叉编译错误

在 Windows 10 上使用 CZMQ 编译 dll 时出错

通过ndk连接套接字编程的错误

C++ / 类编译和字符串属性:“在 '=' 标记之前需要 `)'