WinMain과 관련된 컴파일 에러

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

//////////// 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답변

  • 좋아요

    0

    싫어요
    채택취소하기

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

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

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

    gcc -o main *.c 
    

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

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

작성한 답변에 다른 개발자들이 댓글을 작성하거나 댓글에 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.