我有一个在linux内核/usr/src/linux-3.2/include/linux/unistd.h
中定义的结构:
#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_ */
编译并安装内核,然后从中启动后,我尝试编译并运行该程序:
#include <stdio.h>
#include <linux/unistd.h>
int main(void) {
struct threadinfo_struct *ti = (struct threadinfo_struct*) malloc(sizeof(struct threadinfo_struct));
// ...
return 0;
}
然而,当我尝试这样做时,我在编译程序时遇到错误:
test.c: In function 'main':
test.c:4:78: error: invalid application of 'sizeof' to incomplete type 'struct threadinfo_struct'
为什么我收到此错误,我该如何解决?鉴于我对linux内核很陌生,我很难找到很多信息。
答案 0 :(得分:1)
文件/usr/src/linux-3.2/include/linux/unistd.h
不在标准包含路径中。
用户空间应用程序有自己的构建环境。您要包含位于/usr/include/linux/unistd.h
的文件。大多数内部内核结构都没有为用户空间应用程序定义。
如果您确实需要定义此结构,则需要将文件从linux树复制到项目目录,或者通过添加-isystem/usr/src/linux-3.2/include/
选项来调整gcc命令。
然而,后者会造成很大的混乱,所以最好只复制文件。