WinMain과 관련된 컴파일 에러

조회수 4263회

비주얼 스튜디오 코드로 아래 코드를 컴파일하는데, 에러가 발생합니다.

//////////// LinkedList.h ////////////
#pragma once

typedef struct LINKEDLIST {
    Node* head;
    Node* cur;
    Node* before;
    int numOfData;
    int(*comp)(LData d1, LData d2);
}LinkedList;

typedef LinkedList List;
void ListInit(List* plist);


//////////// LinkedList.c ////////////
#include <stdio.h>
#include "LinkedList.h"

void ListInit(List* plist) {
    plist->head = (Node*)malloc(sizeof(Node));
    plist->head->next = NULL;
    plist->comp = NULL;
    plist->numOfData = 0;
}


//////////// main.c /////////////
#include <stdio.h>
#include "LinkedList.h"

int main() {
    List list;
    ListInit(&list);
    return 0;
}

이렇게 컴파일을 하면 undefined reference to 'ListInit'이라는 에러 메시지가 나타납니다.

이 중에서 LinkedList.c 파일을 별도로 컴파일하면 아래와 같은 에러가 뜹니다.

c:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../libmingw32.a(main.o):(.text.startup+0xa0): undefined reference to `WinMain@16'
collect2.exe: error: ld returned 1 exit status

콘솔이 아니라 윈도우 어플리케이션으로 빌드해서 생긴 오류라고 하는데, 이걸 어떻게 해결해야 하나요? 컴파일 환경은 비주얼 스튜디오 코드 + GCC 6.3입니다.

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 원인은 윈도우 프로그램(GUI)의 경우 엔트리 포인트가 main이 아닌 WinMain 입니다.

    링커가 WinMain을 못찾아서 발생하는 오류 입니다.

    visual studio code 을 옵션을 찾아서 변경하면 될 듯 싶고 정 빌드가 급한것이면 cmd 창을 열어서 소스 저장 디렉토리로 이동후 아래의 커맨드를 이용해보세요.

    gcc -o main *.c 
    

    그런데 소스를 보니 구조체 Node 선언이 없고 LData 타입도 없군요.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)