全志Android源码内核新增配置编译报错解决

科创闲谈 2026-01-31 趣味人生 55364

linux内核配置时,会发现报各种各样的错,在使用过程中源码是没有问题的,就因为增加了某个功能,按理来说增减配置不会对系统有太大的影响,可能每个厂家维护的代码有自己的风格和差异。

下面还原这个报错:

执行make menuconfig后敲问号搜寻配置路径

wKgZO2kaoBmAGPJ7AAGDp24TaJw445.png

我这里配置启用perf

重新编译会出现,这里出现很多需要配置的,如果不熟悉的话很难选择正确,因为官方已经针对方案进行了配置:

如果只敲回车不选择或者选择错了,最后编译如下,即使make clean也是一样的结果:

wKgZO2kaoBqAa1ViAAJQUkrH1ss072.png

最终解决这个问题的关键是在内核路径执行make distclean,清除所有编译生成的结果,才会出现使用默认配置

最终编译成功:

wKgZO2kaoBuAdkeIAAE2jGW0XxU922.png

下面分享一些linux编译容易出错的问题以及大致的解决思路:

在Linux环境下编译程序时,可能会遇到各种问题。以下是一些常见的Linux编译错误及其解决路径:

1. 头文件缺失或包含路径不正确:

问题表现**:编译器提示找不到某个头文件。

解决路径**:确保所有需要的头文件已安装,并通过`-I/path/to/includes`参数指定正确的包含路径。

2. 符号未定义:

问题表现:链接阶段出现`undefined reference to function XYZ`错误。

解决路径:检查是否遗漏了库文件的链接,使用`-llibraryname`选项链接所需的库(例如 `-lmylib`),同时可能需要 `-L/path/to/library` 来指定库文件所在目录。

3. 结构体、联合体等类型定义缺失:

问题表现:类似“sem_union存储大小未知”这样的错误。

解决路径:如果系统不再提供某个类型,需要按照文档或者源码要求自行定义这个类型。

4. C++相关问题:

缺少标准库包含:如没有包含`iostream`或`string`头文件。

命名空间问题:未使用`std::`前缀引用标准库对象。

编译器选择:使用`gcc`编译C++代码而不是`g++`,导致链接问题。

解决路径:确保正确包含头文件,使用适当命名空间,并用`g++`编译C++源文件。

5. 动态库查找路径问题:

问题表现:运行时找不到动态库。

解决路径:将动态库路径添加到`/etc/ld.so.conf`或设置环境变量`LD_LIBRARY_PATH`指向动态库所在的目录。

6. 内核模块编译问题:

内核配置不正确:编译内核模块时,需确保内核配置与模块匹配。

依赖性问题:确认驱动程序所需的内核特性已开启。

7. 编码格式问题:

源代码乱码:跨平台转移代码时,可能因编码格式不同造成乱码。

解决路径:统一源码文件的编码格式,例如在Linux下通常使用UTF-8编码。

8. 权限问题:

执行文件权限不足:无法启动服务或运行程序。

解决路径:检查用户和组权限,必要时以root身份或相应用户组重新安装或启动服务。

9. Makefile或构建脚本错误:

问题表现:make过程中报错,可能是依赖关系设置不当或命令行参数有误。

解决路径:审查并修正Makefile规则,确保编译命令和链接命令正确无误。