16

Code::Blocks、MinGW、および Windows を使用しています。プロジェクトで作業できるように、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;
    }

}
4

5 に答える 5

1

あなたのソース コードは、(Microsoft のコンパイラに対して) 非常に具体的な#pragma comment(lib,"ws2_32.lib")ステートメントを使用していることを示しています。これには 2 つの問題があります。

  1. このプラグマは GCC (つまり、MinGW コンパイラ) では有効ではないため、コンパイル時とリンク時の両方で単純に無視されます。
  2. MinGW では、(ほとんどの (おそらくすべての) 他のプラットフォームの GCC 規則と同様に)、「ws2_32.lib」はありません。ライブラリ (ws2_32.dll のインポート ライブラリ) の正しい名前は "libws2_32.a" です。

問題を解決するには、ソース コードで MSVC 固有のプラグマに依存しないでください。むしろ、tinky_winky が示すように、(ほぼ) リンク コマンド ラインでライブラリを正しく指定する必要があります。

gcc prog.c -o prog.exe [...other .c and .o files...] -lws2_32 ...

(そして、指定するライブラリは、それらを必要とするオブジェクト ファイルまたはソース ファイルの後に来るようにしてください)。

于 2015-12-30T19:25:52.727 に答える