【问题标题】:undefined reference to `__imp_WSAStartup' in linux在 linux 中未定义对 `__imp_WSAStartup' 的引用
【发布时间】:2017-10-28 12:50:57
【问题描述】:

您好,我想在C 中构建一个适用于 Windows 的应用程序,我在 linux 中编程并使用 gccmingw-w64 编译代码。

我尝试了一个带有输出和输入的简单程序,它在 Windows 上运行良好。

但是,我想使用套接字连接到服务器。

于是我在google上搜索,找到了这个教程http://beej.us/guide/bgnet/output/html/multipage/intro.html#audience

它说在 windows 中我们需要包含 winsock 并运行一些命令 所以我做了:

#include <winsock.h>
int main(void)
{
    WSADATA wsaData;
    printf("Hello! This is a test prgoram.\n");
    if (WSAStartup(MAKEWORD(1,1), &wsaData) != 0) {
        fprintf(stderr, "WSAStartup failed.\n");
    }
}

但是当我尝试编译它时,我得到:

对 `__imp_WSAStartup' 的未定义引用 collect2:错误:ld 返回 1 个退出状态

在命令行中我运行的是:

x86_64-w64-mingw32-gcc try.c -o a.exe

那我该怎么办? 如果我在 linux 中编译,我不需要 winsock 库吗? 如何解决这个问题?

谢谢

【问题讨论】:

    标签: c linux windows


    【解决方案1】:

    如果您查看WSAStartup Manual 并向下滚动一点,您会发现它在哪个库中定义:Ws2_32.lib

    这是一个“导入库”,您需要链接一个存根,以便 Windows 程序使用相应的 DLL。 MinGW 包括所有标准的 windows 平台导入库。所以你只需要链接它,使用-lws2_32

    【讨论】:

    • 嘿,谢谢,它可以工作,但是如果我需要另一个库,如何包含两个?
    • 只需添加另一个带有另一个库名称的-l 标志。这与为 linux 编译没有什么不同。
    猜你喜欢
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-18
    • 2010-10-31
    • 2017-03-20
    相关资源
    最近更新 更多