gpt4 book ai didi

c - 由于缺少类型,构建 uclibc linux 3.10-2 (Debian jessie x86_64) 失败

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:29:30 25 4
gpt4 key购买 nike

我正在尝试使用 linux 内核 3.10-2-amd64 在 x86_64 上构建 uClibc 0.9.27 [1]。我可以验证它是基于 Ubuntu 12.04.3 和 3.2.0-49-generic 内核构建的。运行 make 时,它​​设法构建了大量目标文件,但最终到达 CC libc/inet/if_index.os,提示

In file included from /usr/include/linux/kernel.h:4,
from /usr/include/linux/netlink.h:4,
from /usr/include/linux/rtnetlink.h:5,
from libc/inet/netlinkaccess.h:32,
from libc/inet/if_index.c:36:
/usr/include/linux/sysinfo.h:8: error: expected specifier-qualifier-list before '__kernel_long_t'
In file included from /usr/include/linux/rtnetlink.h:6,
from libc/inet/netlinkaccess.h:32,
from libc/inet/if_index.c:36:
/usr/include/linux/if_link.h:317: error: expected specifier-qualifier-list before '__be16'

我验证了我收集到的文件中存在的类型应该已经被吸入。对于__kernel_long_t,包含文件如下所示:

/usr/include/linux/sysinfo.h includes <linux/types.h>
/usr/include/linux/types.h includes <linux/posix_types.h>
/usr/include/linux/posix_types.h includes <asm/posix_types.h>
/usr/include/x86_64-linux-gnu/asm/posix_types.h includes <asm/posix_types_64.h>
/usr/include/x86_64-linux-gnu/asm/posix_types_64.h includes <asm-generic/posix_types.h>
/usr/include/asm-generic/posix_types.h typedefs __kernel_long_t

那么,该错误从何而来,我该如何解决?


[1] 是的,我知道最新版本是 0.9.33.2,但我需要那个特定版本。

最佳答案

解决方案似乎是将较新版本的 libc/inet/netlinkacces.h 反向移植到旧版本。 __kernel_long_t 问题通过避免包含(如有必要,必须在 kernel_types.h 中进行修补,因为定义有意隐藏了头文件的包含守卫而消失了/usr/include) 和其他类型可以通过以下补丁正确包含:

index 417d83a..1b9c857 100644
--- a/libc/inet/netlinkaccess.h
+++ b/libc/inet/netlinkaccess.h
@@ -21,16 +21,7 @@

#include <features.h>
#include <stdint.h>
-#include <sys/types.h>
-
-#define _LINUX_TYPES_H
-typedef uint8_t __u8;
-typedef uint16_t __u16;
-typedef uint32_t __u32;
-typedef uint64_t __u64;
-typedef int32_t __s32;
-#include <linux/rtnetlink.h>
-#include <linux/netlink.h>
+#include <unistd.h>

/* Should prob be a configure option or something */
#ifndef __ASSUME_NETLINK_SUPPORT

这基本上是旧版 netlinkaccess.h 和新版本之间的变化(ash 建议的预处理文件的差异提示我这一点)。

关于c - 由于缺少类型,构建 uclibc linux 3.10-2 (Debian jessie x86_64) 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18598995/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com