2012-10-21 45 views
2

我已經在Linux內核中的/usr/src/linux-3.2/include/linux/unistd.h定義的結構:錯誤使用Linux內核結構定義

#ifndef _LINUX_UNISTD_H_ 
#define _LINUX_UNISTD_H_ 

struct threadinfo_struct { 
    int pid; 
    int nthreads; 
    int *tid; 
}; 

/* 
* Include machine specific syscall numbers 
*/ 
#include <asm/unistd.h> 

#endif /* _LINUX_UNISTD_H_ */ 

編譯和安裝內核,然後從它啓動後,我嘗試編譯並運行此程序:

test.c: In function 'main': 
test.c:4:78: error: invalid application of 'sizeof' to incomplete type 'struct threadinfo_struct' 

#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的文件。大多數內部內核結構沒有爲用戶空間應用程序定義。

如果您確實需要定義此結構,那麼您需要將該文件從Linux樹複製到您的項目目錄,或者通過添加-isystem/usr/src/linux-3.2/include/選項來調整gcc命令。

但是,後者會造成大亂,所以最好只複製文件。

+0

謝謝,這工作得很好! :d – Darthfett