2016-09-29 2 views
0

간단한 "Hello World!" c 프로그램, 내 데스크탑에 hello.c라는 이름을 붙였습니다 :Windows에서 간단한 프로그램을 Mingw GCC와 연결하는 방법

#include <stdio.h> 

int main() { 
    printf("Hello world!\n"); 

    return 0; 
} 

다음 명령을 실행합니다.

  • I 사전 처리 함께 : GCC는 아가야에게 내가 그것을 조립
  • -S : 의 cpp에서는 hello.c> 아가야
  • 나는 그것을 컴파일로 을 - 안녕하세요. 안녕하세요.

지금까지 모두 좋았습니다. 하지만, 나는 그것을 연결할 수 없습니다. 다른 명령들 중에서도 다음과 같이 시도했습니다.

ld -o hello.exe hello.o 
ld -o hello.exe hello.o -lgcc 
ld -o hello.exe hello.o -nostdlib -lgcc 

아무 것도 작동하지 않습니다. 내가 매 경우에 얻을 링크 오류는 다음과 같습니다

hello.o:hello.c:(.text+0x9): undefined reference to `__main' 
hello.o:hello.c:(.text+0x15): undefined reference to `puts' 

어떻게 내가 마지막으로 실행 프로그램 hello.exe을 생산하기 위해이 조립 된 프로그램 hello.o를 연결할 수 있습니까? 나는 무엇을 놓치고 있습니까? [Windows 8.1, Mingw 버전 0.6.2 사용.] 미리 감사드립니다.

+0

? "아무것도 작동하지 않습니다"는 오류 상황에 대한 매우 유용한 설명이 아닙니다. – tofro

+0

gcc는 컴파일러입니다. 이 명령은 실행 파일을 생성하는 모든 작업을 수행합니다. 나는 단계적으로 가고 있었다. 이제 마지막 단계에서 링커 (ld)와 연결하고 싶습니다. –

+0

왜 연결하고 있습니까? 여기에 어셈블리 파일이 있습니까? 그리고 전반적인 목표는 무엇입니까 (어셈블리와 C 파일을 링크하려면?)? – amanuel2

답변

1

설명 질문에 대한 답은 특히 유용하지 않은 경우에도 :

을 hello.exe -o

LD hello.o -lmsvcrt -entry = _main -subsystem = 콘솔 같은 시도

당신과 같이 GCC를 호출 링커 명령 행 표준 GCC 사용을 보려면 :

마지막 라인 출력이 사용되어야한다 무엇 -v

GCC TEST.C -o 테스트 -Wl, ... '의 gcc -o hello.exe hello.c`합니까 무엇

+0

출력 : ld : -lmsvcrt를 찾을 수 없습니다. 나는 그렇게 복잡해야한다고 믿을 수 없다. 아직 찾고있는 중. 업데이트됩니다. –

+1

* 너무 복잡합니다. 컴파일러 프론트 엔드 인 gcc를 사용하면 이러한 복잡성에서 벗어날 수 있습니다. Mingw는 MSC 런타임을 사용하도록 제작되었습니다. 설치 과정에서 libmsvcrt.a는 \ MingW \ lib에 있습니다. 아마도 여러분 자신이있는 곳으로 -L을 추가해야 할 것입니다. – tofro

+0

컴파일러 프론트 엔드가 링커를 호출하는 방법을 알아 보려면 위의 편집을 참조하십시오. – tofro

관련 문제