undefinierter Verweis auf `__imp_WSACleanup’

Lesezeit: 3 Minuten

Benutzer-Avatar
Benutzer2682541

Dies ist mein erstes Programm mit Winsock. Wie Sie sehen können, habe ich #include <winsock2.h> und verlinkt ws2_32.dllaber der Code wird immer noch nicht kompiliert:

#include<winsock2.h>
#pragma comment(lib, "ws2_32")
class CInitSock{
public:

    CInitSock(BYTE minorVer=2,BYTE majorVer=2){
        //initialize WS2_32.dll
        WSADATA wsaData;
        WORD sockVersion = MAKEWORD(minorVer,majorVer);
        if(::WSAStartup(sockVersion,&wsaData)!=0){
            exit(0);
        }
    }
    //release winSock libary
    ~CInitSock(){
        ::WSACleanup();
    } 
};

#include "CInitSock.h"
#include<stdio.h>
CInitSock initSock;
int main(void){
    char szHost[256];
    ::gethostname(szHost,256);
    hostent *phost = ::gethostbyname(szHost);
    in_addr addr;
    for(int i = 0;;i++){
        char *p = phost->h_addr_list[i];
        if(p==NULL){
            break;
        } 
        memcpy(&addr.S_un.S_addr,p,phost->h_length);
        char *szIp = ::inet_ntoa(addr);
        printf("%s \n",szIp);   
    }
}

Das ist der Fehler:

mingw32-make.exe -f "D:\project\c_program\Makefile.win" all
g++.exe GetAllIPs.o -o win_socket.exe -L"D:/tools/develepment/Dev-Cpp/MinGW64/x86_64- w64-mingw32/lib" -L"D:/tools/develepment/Dev-Cpp/MinGW64/lib32" -static-libgcc -mwindows -g3


GetAllIPs.o: In function `main':
D:\project\c_program/GetAllIPs.cpp:6: undefined reference to `__imp_gethostname'
D:\project\c_program/GetAllIPs.cpp:7: undefined reference to `__imp_gethostbyname'
D:\project\c_program/GetAllIPs.cpp:15: undefined reference to `__imp_inet_ntoa'
GetAllIPs.o: In function `CInitSock::CInitSock(unsigned char, unsigned char)':
D:\project\c_program/CInitSock.h:10: undefined reference to `__imp_WSAStartup'
GetAllIPs.o: In function `CInitSock::~CInitSock()':
D:\project\c_program/CInitSock.h:16: undefined reference to `__imp_WSACleanup'
collect2.exe: error: ld returned 1 exit status

mingw32-make.exe: *** [win_socket.exe] Error 1

Jetzt bin ich total verwirrt…

  • Wenn du benutzt GCC versuchen Sie hinzufügen ws2_32.lib auf diese Weise : -lws2_32

    – Steinpilz

    1. September 2013 um 13:56 Uhr


  • Es tut kompilieren. Das tut es nicht Verknüpfung.

    – Benutzer207421

    9. Oktober 2015 um 4:02 Uhr

Benutzer-Avatar
Martin Schlott

Das von Ihnen verwendete Pragma funktioniert nur für den Visual C++ Compiler und wird vom gcc ignoriert

#pragma comment(lib, "ws2_32")

Sie müssen die ws2_32.lib manuell in das Makefile einfügen. wie:

-L"ws2_32"

(Ich denke, es war ohne die “.lib” am Ende)

am Ende der g++ Zeile. Sie müssen natürlich den vollständigen Pfad hinzufügen, den ich im Moment nicht zur Hand habe.

  • vielen Dank, ich wusste nicht, dass gcc das Pragma ignoriert, ich benutze das dev++, es kann die Option nicht hinzufügen, wenn es kompiliert, ich glaube, ich muss eine andere ide ändern.

    – Benutzer2682541

    1. September 2013 um 14:42 Uhr


  • FYI, MSVC ist nicht der einzige Compiler, der unterstützt #pragma comment(lib, ...)

    – Rémy Lebeau

    26. April um 20:19 Uhr

Benutzer-Avatar
L.ling

Ich bin bei dir auf das gleiche Problem gestoßen. Ich habe es gelöst, indem ich einen Befehl hinzugefügt habe -lwsock32. Sie können den Befehl gemäß den folgenden Schritten hinzufügen:

  1. Werkzeug
  2. Compiler-Optionen
  3. wählen general
  4. klicken add the following commands when calling the compilers

dann können Sie den obigen Befehl hinzufügen -lwsock32.

hinzufügen

-lwsock32

zu deinem Befehlszeile Anstatt von #pragma beim Kompilieren mit MinGW

g++ src/main.cpp -o release/myApp.exe -lwsock32

Benutzer-Avatar
Walterti

Navigieren Sie in DevC++ zu Projekt >> Projektoptionen (oder über normalerweise Strg+h); dann im “Parameter“Tab da ist eine Schaltfläche”Bibliothek oder Objekt hinzufügen“ und dann hinzufügen libws2_32.a.

Für Codeblöcke unter Windows: gehe zu

Projekt -> Build-Optionen -> Linker-Einstellungen (stellen Sie sicher, dass das Projekt auf der linken Seite ausgewählt ist, kein Build-Ziel) und fügen Sie in der linken Liste die Bibliothek “ws2_32” hinzu (tippen Sie sie ein).
Geben Sie hier die Bildbeschreibung ein

1312220cookie-checkundefinierter Verweis auf `__imp_WSACleanup’

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy