在ubuntu上编译C代码时遇到问题。 (#include错误)

时间:2013-10-11 05:00:12

标签: c linux ubuntu header

我正在尝试在最新版本的ubuntu上编译一个C程序,以便稍后将编译好的程序放在另一台机器上。但是,当我使用gcc prog.c -o prog编译时,我收到一个错误:“致命错误:asm / page.h:没有这样的文件或目录”这是标题:

#include <stdio.h>
#include <errno.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
#include <limits.h>
#include <signal.h>
#include <unistd.h>
#include <sys/uio.h>
#include <sys/mman.h>
#include <asm/page.h>
#include <asm/unistd.h>

我在#include时遇到错误。它说致命错误:asm / page.h:没有这样的文件或目录。就像我说的,我只是想编译它。有没有办法让我得到丢失的标题或什么?感谢。

3 个答案:

答案 0 :(得分:5)

通常,asm/page.h仅存在于Linux内核树中,通常位于arch/<archname>/asm/page.h下,并且应该仅用于内核代码(或内核模块)。

另一方面,

stdio.hstdlib.h不得在内核代码中使用。 所以,你原来的源代码看起来最好看。最有可能它首先不需要asm/page.h,实际上它只需要linux/types.h(这是内核asm/page.h之一包含的标题之一)。

答案 1 :(得分:5)

这些头文件不会丢失,它们已被移动。 ubuntu打包器移动了东西,以前在'/ usr / include / asm'中的头文件的位置现在位于'/ usr / include / asm-generic'

要修复,只需添加一个链接:

  

sudo ln -s / usr / include / asm-generic / usr / include / asm

......或者,也许你可能缺乏构建必不可少的东西。这是在linux中编译Code所必需的。  安装build-essential

  

sudo apt-get install build-essential

现在重新创建正确的链接:

  

sudo ln -s / usr / include / asm-generic / usr / include / asm

Build-essential应该安装/ usr / include / asm-generic文件夹。如果您缺少此类文件夹,请重新安装build-essentials并验证该文件夹是否存在。

/ usr / include / asm-generic文件夹是否存在?

它由build-essentials安装,但检查它是一个安装它的依赖项。

如果/ usr / include / asm-generic不存在,请尝试安装或重新安装linux-libc-dev。

那应该创建asm-generic文件夹。如果是这样,请删除旧链接并将asm重新链接到asm-generic。

答案 2 :(得分:0)

您还可以将其添加到制作文件中

gcc -I /usr/include/x86_64-linux-gnu --your_other_arguments

相关问题