2012-10-21 5 views
2

나는 리눅스 커널의 /usr/src/linux-3.2/include/linux/unistd.h에 정의 된 구조를 가지고 리눅스 커널에 정의 된 사용 :오류는 구조체

test.c: In function 'main': 
test.c:4:78: error: invalid application of 'sizeof' to incomplete type 'struct threadinfo_struct' 
,369 : 나는 시도하고이 작업을 수행 할 때

#include <stdio.h> 
#include <linux/unistd.h> 
int main(void) { 
    struct threadinfo_struct *ti = (struct threadinfo_struct*) malloc(sizeof(struct threadinfo_struct)); 
    // ... 
    return 0; 
} 

그러나, 나는이 프로그램의 컴파일에 오류가

이 오류가 발생하는 이유는 무엇이며 어떻게 해결할 수 있습니까? 필자는 Linux 커널을 처음 접했을 때 많은 정보를 찾기가 어렵습니다.

답변

1

/usr/src/linux-3.2/include/linux/unistd.h 파일이 표준 포함 경로에 없습니다.

사용자 공간 응용 프로그램에는 고유 한 빌드 환경이 있습니다. /usr/include/linux/unistd.h에있는 파일을 포함하고 있습니다. 대부분의 내부 커널 구조는 사용자 공간 응용 프로그램에 대해 정의되지 않습니다.

이 구조체를 실제로 정의해야한다면 리눅스 트리에서 프로젝트 디렉토리로 파일을 복사하거나 -isystem/usr/src/linux-3.2/include/ 옵션을 추가하여 gcc 명령을 조정해야합니다.

그러나 후자는 큰 혼란을 야기하므로 파일을 복사하는 것이 좋습니다.

+0

감사합니다. :디 – Darthfett