我正在尝试在最新版本的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:没有这样的文件或目录。就像我说的,我只是想编译它。有没有办法让我得到丢失的标题或什么?感谢。
答案 0 :(得分:5)
通常,asm/page.h
仅存在于Linux内核树中,通常位于arch/<archname>/asm/page.h
下,并且应该仅用于内核代码(或内核模块)。
stdio.h
和stdlib.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