2017-04-07 1 views
0

QT Creator를 사용하여 C 일반 프로젝트를 작성하고 있습니다. 내 프로젝트가 소켓 생성을 포함하고 많은 참조 오류가 발생합니다.C에서 winsock2.h를 올바르게 연결하는 방법?

내 코드는 간단하다 :

#include <winsock2.h> 
#include <stdio.h> 

// Need to link with Ws2_32.lib 
#pragma comment (lib, "Ws2_32.lib") 

int main(int argc , char *argv[]) 
{ 
    WSADATA wsa; 
    SOCKET s; 

    printf("\nInitialising Winsock..."); 
    if (WSAStartup(MAKEWORD(2,2),&wsa) != 0) 
    { 
     printf("Failed. Error Code : %d",WSAGetLastError()); 
     return 1; 
    } 

    printf("Initialised.\n"); 

    if((s = socket(AF_INET , SOCK_STREAM , 0)) == INVALID_SOCKET) 
    { 
     printf("Could not create socket : %d" , WSAGetLastError()); 
    } 

    printf("Socket created.\n"); 

    return 0; 
} 

컴파일 오류 :

undefined reference to `[email protected]' 
undefined reference to `[email protected]' 
undefined reference to `[email protected]' 
undefined reference to `[email protected]' 

그럼 난이 winsock2.h lib에 포함되지 않음을 의미 가정합니다. #pragma comment()없이이 작업을 수행하는 방법은 무엇입니까?

+0

@ a3f 경고를 보내 주셔서 감사합니다! 방금 답변을 확인했는데 현재 작동 중입니다 –

답변

0

#include <winsock2.h> 사용상 좋습니다. 프로젝트 설정을 업데이트하고 ws2_32.lib을 링크 라이브러리로 추가해야합니다.

Qt의 경우이 줄을 .pro 파일에 추가하기 만하면됩니다. 당신이 마이크로 소프트 컴파일러를 사용하는 가정 :

LIBS += ws2_32.lib 

참고 : 실제로 명령 줄에서 "빌드"디렉토리를 삭제 한 후 변경 내용을 적용하려면 Qt는 창조주로부터 "정리 빌드를"않습니다.

+0

Visual Studio 프로젝트입니까? –

+0

오, 나는'Qt' 태그를 보지 못했습니다 ... 곧 해결할 것입니다 .... – selbie

+0

예! 이 솔루션은 작동합니다. –

관련 문제