【发布时间】:2015-11-02 00:08:46
【问题描述】:
我已经安装了 Fedora 22,它具有默认内核 4.0.4。 但是我需要内核 4.1.4,所以我在 Fedora 22 上安装了内核 4.1.4。并在 grub 中为新内核创建条目。
内核 4.1.4 安装成功,我可以使用新内核登录。
“uname -a”的输出-
uname -a
Linux localhost.localdomain 4.1.4 #1 SMP Fri Aug 7 10:52:36 EDT 2015 x86_64 x86_64 x86_64 GNU/Linux
新内核的路径 -
/usr/src/linux-4.1.4
包含文件夹的路径 -
/usr/src/linux-4.1.4/include
现在我编写了一个 C 程序,它使用了在新内核头文件中定义的宏 AF_MPLS。 c程序编译失败,因为AF_MPLS不在/usr/include/sys/socket.h中。
发现错误 -
RouteMPLS.c: In function âroute_addâ:
RouteMPLS.c:212:24: error: âAF_MPLSâ undeclared (first use in this function)
req.r.rtm_family = AF_MPLS;
RouteMPLS.c 中使用的头文件
#include <stdio.h>
#include <asm/types.h>
#include <linux/netlink.h>
#include <linux/rtnetlink.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
#include <errno.h>
所以,我将头文件 a/c 的位置更改为新内核-
#include "/usr/src/linux-4.1.4/include/linux/socket.h"
仍然会引发编译错误,然后我尝试使用
gcc RouteMPLS.c -I /usr/src/linux-4.1.4/include/
In file included from /usr/src/linux-4.1.4/include/linux/kernel.h:6:0,
from /usr/src/linux-4.1.4/include/linux/skbuff.h:17,
from /usr/src/linux-4.1.4/include/linux/netlink.h:6,
from RouteMPLS.c:3:
/usr/src/linux-4.1.4/include/linux/linkage.h:7:25: fatal error: asm/linkage.h: No such file or directory
编译终止。
请指导我如何使用新的内核头文件安装我们的 c 程序 -
默认内核头文件位置 -
/usr/include
新内核头位置 -
/usr/src/linux-4.1.4/include
提前致谢。
【问题讨论】:
-
你记得安装内核头文件吗?
-
我从源代码安装了新的 kernel-4.1.4 -
-
这不能回答问题。安装接头是一个独立的步骤。
-
需要单独安装内核头文件吗?
-
你的内核编译教程是怎么说的?
标签: c linux linux-kernel