我使用的是Code::Block、MinGW和Window。我正在尝试初始化winsock,这样我就可以在项目上工作了。我一直收到错误Undefined Reference to WSAStartup@8有人知道怎么解决这个问题吗?
#include <stdio.h>
#include <stdlib.h>
#include <winsock2.h>
#pragma comment(lib,"ws2_32.lib")
int main(int argc , char *argv[]){
WSADATA wsa;
int output;
output=WSAStartup(MAKEWORD(2,2),&wsa);
if(output != 0) {
printf("Startup failed %d\n", output);
return 1;
} else {
printf("Initialized");
return 0;
}
}发布于 2015-12-21 03:46:43
链接器在加载代码后查找依赖项。如果库在构建过程中出现在需要符号之前,因为源文件在此之后出现,则不使用任何符号,以后当它们出现在源文件中时,它们将无法解析。将链接的winsock库-lws2_32放在源文件和目标文件之后。
gcc prog.c -o prog -lws2_32发布于 2016-08-10 10:05:49
我做了另一种方法,找到包含编译器不能链接的函数的库,然后添加到编译器的链接器中。并且几乎所有的库都在MINGW的lib文件夹中(通常是C:/MinGW/ lib );就像这样的These are libraries I add when I got some errors with Dlib,或者你可以对自动注册遗漏的库执行这个指令。Building a wxWidgets program in Code::Blocks
发布于 2015-12-31 03:25:53
您的源代码显示您使用了非常特定的(对微软的编译器而言) #pragma comment(lib,"ws2_32.lib")语句。这有两个问题:
要解决您的问题,您不能在源代码中依赖于MSVC特定的编译指示;相反,您必须在链接命令行上正确地指定库,(几乎)如tinky_winky所示:
gcc prog.c -o prog.exe [...other .c and .o files...] -lws2_32 ...(并确保您指定的任何库都在目标文件或源文件之后(这是需要它们的))。
https://stackoverflow.com/questions/34384803
复制相似问题