2014-10-16 5 views
12

내 코드를 컴파일하는 데 GCC Linaro 컴파일러를 사용하고 있습니다. 오류 unknown type name size_tlibio.h에서 발생했습니다. 그것의 포함은 stdio.h입니다. 내 코드에서 나는 단지 stdio.h을 포함하고있다.GCC linaro 컴파일러가 "unknown type name size_t"오류를 throw합니다.

이 오류를 해결하는 방법을 알려주세요.

+2

코드를 표시하십시오. 우리는 당신의 코드를 보지 않고는 도울 수 없습니다. –

+0

'size_t not found '오류가 내 코드에서 발생했다면, 임시로 컴파일 할 때'#define size_t unsigned long'을했을 것입니다. 그러나이 오류는이 컴파일러 내부에있는이 시스템 헤더 파일'libio.h '에서 유래합니다. – rashok

+1

'gcc -Wall -C -E'로 전처리 된 형태를 얻고'gcc -Wall -g -H'로 컴파일하여 포함 된 헤더를 얻을 수도 있습니다. 그리고'libio.h'는 컴파일러에 특화된 헤더가 아닙니다 (libc만의 것입니다). –

답변

27

C99, §7.17에 따라 size_t은 내장형이 아니지만 <stddef.h>에 정의되어 있습니다.

<stddef.h> 헤더를 포함하면 문제가 해결됩니다.

2

Linaro 컴파일러 (x86 Windows 및 x86 Linux 모두)를 ARM Linux 용으로 빌드하는 QT 프로젝트에서 이와 똑같은 문제가 발생했습니다. 똑같은 코드와 .pro 파일을 사용하여 Windows 구축에 아무런 문제가 없었지만, 으로 추적 한 에있는 unknown type name 'size_t'으로 시작하는 오류가 많았습니다. stdio.h (호스트 컴퓨터가 아닌 대상 하드웨어의 sysroot)을 살펴보면 #include <stddef.h> (많은 경우 #include <libio.h> 이전) 이었으므로 stddef.h이 확실히 포함되었습니다. 그러나 추가 검사시 stddef.h은 완전히 비어 있었고 파일 크기는 1 바이트였습니다. 이는 내 sysroot와 호스트 컴퓨터에있는 stddef.h에 해당합니다. 나는 왜이 파일들이 비어 있는지 전혀 모른다.

어쨌든 내 .pro 파일에 불필요한 INCLUDEPATH += /usr/include/linux이있는 것으로 나타났습니다. 제 리눅스 컴퓨터에서 qmake가 생성 한 Makefile에 -I/usr/include/linux을 추가했습니다. Windows 빌드 머신에서 qmake가 생성 한 Makefile에 -isystem /usr/include/linux을 추가했습니다. 일단 내가 이것을 주석 처리했다면,이 라인들은 Makefile에서 제거되었고 두 머신 모두에서 빌드되었습니다. -isystem /usr/include/linux은 Windows 빌드 머신에서 아무런 문제가 발생하지 않았으므로 INCLUDEPATH += /usr/include/linux을 제거해도 아무런 해가 없습니다.

왜이 문제가 해결되었는지 알 수는 없지만 헤더 파일간에 일종의 충돌이 있었던 것으로 생각됩니다. 아마도 호스트 헤더 파일을 sysroot 헤더 파일과 믹싱하거나 어쨌든 순환 종속성을 생성하는 것이었을 것입니다. GCC 문서에 따르면 -I 옵션에 포함 된 것이 시스템 헤더 파일보다 우선합니다. 이 문제에 대한 최선의 조언은 정확히 어떤 헤더 파일이 포함되어 있는지, 어디에서 오는 것인지 정확히 살펴 보는 것입니다.