2013-05-11 6 views
3

저는 msys와 MinGW로 작은 프로젝트를 컴파일하고 디버깅하고 있습니다. 때때로, 그것은 잘 컴파일하지만, 약 2/3 시간의 대신이 오류 메시지를 출력 :MinGW 성가신 동작, 때때로 컴파일되지 않는 경우가 있습니까?

include/player.h:1:0: fatal error: can't create precompiled header 
bazglx.exe:invalid argument 
compilation terminated. 
make: *** [bazglx.exe] Error 1 

최상위 라인은 핀란드어로했다 그래서 나는 그것을 번역했다 그리고 영어 것과 동일하지 않을 수 있습니다. 여기 내 메이크 파일은 다음과 같습니다.

때로는 오류 메시지를 표시하지만 손상된 exe 파일을 만듭니다. 그것이 비난하는 파일의 시작 부분에는 특별한 것이 없으며 다른 파일을 비난했다. 이것은 정말로 혼란스럽고 성가시다. 그리고 나의 진도를 정말로 늦추 게한다.

+0

이것이 무엇을 의미하는지 모르겠습니다. 디스크 공간을 확인하고 충분한 공간을 확보 할 수 있습니까? 또한'LANG' 환경 변수를'C' 값으로 설정하면 모든 메시지가 영어로 출력됩니다. – MadScientist

+0

나는 공간이 충분하다. 프로그램은 크지 않다. 그리고 나는 영어의 메시지를 받았고 그것은 동일하다. – Mihq

+0

'SDL_CFLAGS : = $ (shell sdl-config --cflags)'와'SDL_LDFLAGS : = $ (shell sdl-config --libs)'로 바꿀 것입니다. 그런 다음'CFLAGS : = ... $ (SDL_CFLAGS)'와'LDFLAGS : = ... $ (SDL_LDFLAGS)'. 그리고 나서'CFLAGS'와'LDFLAGS' 만 사용하십시오. 게다가'-static-libgcc -static-libstdC++'를 실제로 링크하기위한 플래그, ** 컴파일하지 않는 것,'CFLAGS'를 링크 단계에서 제거하기 때문에'LDFLAGS'로 옮깁니다. 마지막 줄. –

답변

1

이 규칙은 잘못이다 :

bazglx.exe:$(OBJ) $(DEPS) 
    $(CC) $^ -o [email protected] `sdl-config --libs --cflags` $(CFLAGS) $(LFLAGS) 

$(CC)가 오브젝트 파일에 추가 입력으로 헤더 파일의 목록이 호출됩니다. 컴파일러는 헤더를 출력 파일 bazglx.exe (한 번에 하나씩 겹쳐 쓰면서)에 미리 컴파일하려고 시도하고 출력을 생성하기 위해 오브젝트 파일을 출력 파일에 다시 링크합니다 (다시 덮어 쓰기).

링크 단계에 오브젝트 파일과 라이브러리 만 포함되도록하고 싶습니다.

include/player.h을 사전 컴파일하려고 할 때 GCC가 bazglx.exe 파일을 열 수 없기 때문에 오류가 발생하고 (때로는 가져 오는 것) 의심 스럽습니다. 당신은 당신이 자신에 다음 명령을 입력하면 (아마로 비록 두 번째 줄에 다른 오류와) 유사한 효과를 볼 수 있습니다 어쩌면 안티 바이러스를 열고 bazglx.exe의 반복 새로운 인스턴스를 처리

g++ include/player.h -o some-non-directory/bazglx.exe 

을하고, 때로는 GCC가 그것을 다시 만들고 싶어하기 전에 처리가 완료되지 않았습니까?

+1

일반적으로 바이러스 백신이 자신의 코드를 컴파일 할 폴더의 파일을 검색하지 않도록 지시하는 것이 좋습니다. 새로 컴파일 된 프로그램을 검사하는 바이러스 백신은 이점이 없으면 문제를 늦추고 때로는 문제를 일으 킵니다. 한때 내 프로그램에서 오탐을 일으켰는데, 바이러스 백신이 이러한 파일을 자동으로 제거하라는 명령을 받았기 때문에 나는 왜 컴파일하고 있는지 알기 위해 나이를 들였지만 이진 파일은 없었습니다. – Steve314