【问题标题】:Error using struct defined in linux kernel使用 linux 内核中定义的结构时出错
【发布时间】:2012-10-11 16:31:18
【问题描述】:

我在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 内核非常陌生,这对我来说很难找到太多信息。

【问题讨论】:

    标签: c linux-kernel


    【解决方案1】:

    文件/usr/src/linux-3.2/include/linux/unistd.h 不在标准包含路径上。

    用户空间应用程序有自己的构建环境。您将包含位于/usr/include/linux/unistd.h 的文件。大多数内部内核结构都没有为用户空间应用程序定义。

    如果你真的需要定义这个结构,那么你需要将文件从linux树复制到你的项目目录,或者通过添加-isystem/usr/src/linux-3.2/include/选项来调整gcc命令。

    但是,后者会造成很大的混乱,所以最好只复制文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多