首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C-未定义的对WSAStartup@8‘的引用

C-未定义的对WSAStartup@8‘的引用
EN

Stack Overflow用户
提问于 2015-12-21 03:15:11
回答 5查看 32K关注 0票数 15

我使用的是Code::Block、MinGW和Window。我正在尝试初始化winsock,这样我就可以在项目上工作了。我一直收到错误Undefined Reference to WSAStartup@8有人知道怎么解决这个问题吗?

代码语言:javascript
复制
#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;
    }

}
EN

回答 5

Stack Overflow用户

发布于 2015-12-21 03:46:43

链接器在加载代码后查找依赖项。如果库在构建过程中出现在需要符号之前,因为源文件在此之后出现,则不使用任何符号,以后当它们出现在源文件中时,它们将无法解析。将链接的winsock库-lws2_32放在源文件和目标文件之后。

代码语言:javascript
复制
gcc prog.c -o prog -lws2_32
票数 36
EN

Stack Overflow用户

发布于 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

票数 2
EN

Stack Overflow用户

发布于 2015-12-31 03:25:53

您的源代码显示您使用了非常特定的(对微软的编译器而言) #pragma comment(lib,"ws2_32.lib")语句。这有两个问题:

  1. 这个编译指示在GCC (也就是MinGW编译器)中是无效的,所以它在编译和链接时都被忽略了。
  2. in MinGW,(与GCC在most (也许all?)上的约定一样)其他平台),则没有"ws2_32.lib";库(它是ws2_32.dll的导入库)的正确名称是"libws2_32.a".

要解决您的问题,您不能在源代码中依赖于MSVC特定的编译指示;相反,您必须在链接命令行上正确地指定库,(几乎)如tinky_winky所示:

代码语言:javascript
复制
gcc prog.c -o prog.exe [...other .c and .o files...] -lws2_32 ...

(并确保您指定的任何库都在目标文件或源文件之后(这是需要它们的))。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34384803

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档