参考文章:
1. buildroot编译常见错误
2. multiple definition of `yylloc‘
3. 韦东山Linux Study2(编译bootloader,内核,buildroot)
4. Ubuntu 22.04 Server 网络配置
这里编译百问网imx6ull开发板时的Buildroot时遇见的题(升级了ubuntu 到22.04后就出现了这些问题),目前感受来说是要多使用VM 的快照
1. c-stack.c:55:26: error: missing binary operator before token “(”
2. libfakeroot.c:99:40: error: ‘_STAT_VER’ undeclared (first use in this function) 99 | #define INT_NEXT_STAT(a,b) NEXT_STAT64(_STAT_VER,a,b)
3. ‘cmake_root’: temp_parser.get_cmake_var(‘MESON_CMAKE_ROOT’)[0],
File "/home/yang/WorkSpace/WDS/imx6ullpro/100ask_imx6ull-sdk/Buildroot_2020.02.x/output/host/lib/python3.8/site-packages/mesonbuild/interpreter.py", line 3281, in dependency_impl
dep = dependencies.find_external_dependency(name, self.environment, kwargs)
File "/home/yang/WorkSpace/WDS/imx6ullpro/100ask_imx6ull-sdk/Buildroot_2020.02.x/output/host/lib/python3.8/site-packages/mesonbuild/dependencies/base.py", line 2237, in find_external_dependency
d = c()
File "/home/yang/WorkSpace/WDS/imx6ullpro/100ask_imx6ull-sdk/Buildroot_2020.02.x/output/host/lib/python3.8/site-packages/mesonbuild/dependencies/base.py", line 1111, in __init__
CMakeDependency.class_cmakeinfo[self.for_machine] = self._get_cmake_info()
File "/home/yang/WorkSpace/WDS/imx6ullpro/100ask_imx6ull-sdk/Buildroot_2020.02.x/output/host/lib/python3.8/site-packages/mesonbuild/dependencies/base.py", line 1204, in _get_cmake_info
'cmake_root': temp_parser.get_cmake_var('MESON_CMAKE_ROOT')[0],
IndexError: list index out of range
这里make all -j4 | grep **** -Rn
我使用重定向后,似乎跳过了;(这边不复现了)
4. is not a member numeric_limits
在报错的文件中添加 #include <limits>
头文件
这里出现最多的是缺少std::numeric_limitss的, 用grep numeric_limits -Rn 搜索当前项目中有哪些文件使用了相关的宏,然后看看该哪些文件没有报错,找出为什么没有报错
5. kernel报错: scripts/dtc/dtc-parser.tab.o:(.bss+0x10): multiple definition of `yylloc’; scripts/dtc/dtc-lexer.lex.o:(.bss+0x0): first defined here
在scripts/dtc/ 目录下grep "yylloc" * -Rn
,找到变量定义 再查找 grep "YYLTYPE yylloc" * -Rn
找到具体文件,将multiple的前面添加 extern 关键字
6. multiple definition of ‘isize’
这里搜索 isize , 发现定义在armemu.c文件1145中,这里由于armemu26.o 和 armemu32.o 都使用 armemu.c ,归档为libsim.a被使用时,链接的时候,报重定义错误;这里将ARMword返回值类型写入具体函数,isize 定义放在A或者B即可;
补充:
ARMword isize;
ARMword
#ifdef MODE32
ARMul_Emulate32 (ARMul_State * state)
#else
ARMul_Emulate26 (ARMul_State * state)
#endif
改成如下:
#ifdef MODE32
ARMword isize;
ARMword ARMul_Emulate32 (ARMul_State * state)
#else
ARMword isize;
ARMword ARMul_Emulate26 (ARMul_State * state)
#endif
7. 一些系统依赖安装 以及编译器不支持
这里一些情况占时不处理了,跳过相关的编译;(详情参考文章3的error5 的第二小段)
7.1
去掉两个勾选;
7.2 – Performing Test C_HAS_MFPU_NEON - Failed
不知道怎么解决,看到opencv3 相关的,我把onpencv3相关的在.config注释掉了(make menuconfig 好难找)
8. Operation not permitted
使用sudo make ***
或者 chmod 777 * -R
后 再make