当前位置: 首页 > news >正文

在Ubuntu 20.04上踩坑记:Bochs 2.6.9编译GeekOS 0.3.0,我遇到的5个报错及解决方法

在Ubuntu 20.04上踩坑记Bochs 2.6.9编译GeekOS 0.3.0我遇到的5个报错及解决方法第一次尝试在Ubuntu 20.04上编译GeekOS 0.3.0时我以为这会是一个简单的过程——毕竟网上有那么多教程。但现实给了我当头一棒从依赖安装到Bochs配置再到最后的编译运行几乎每一步都遇到了意想不到的问题。这篇文章记录了我解决这些问题的完整过程希望能帮助其他遇到类似困境的开发者少走弯路。1. 依赖安装的陷阱那些教程没告诉你的细节大多数教程都会告诉你安装build-essential和xorg-dev但很少有人提到这些包在不同Ubuntu版本中的差异。我在安装过程中遇到了三个关键问题1.1 缺失的32位库支持当我第一次运行sudo make时遇到了这样的错误/usr/bin/ld: cannot find -lstdc /usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/9/libstdc.so when searching for -lstdc解决方法sudo apt-get install gcc-multilib g-multilib这个错误是因为GeekOS需要32位编译环境而Ubuntu 20.04默认不包含这些库。安装后还需要检查Makefile中的编译器设置TARGET_CC : $(TARGET_CC_PREFIX)gcc -m32 HOST_CC : gcc -m32 TARGET_LD : $(TARGET_CC_PREFIX)ld -m elf_i3861.2 GTK开发包的版本问题Bochs的GUI模式需要GTK支持但直接安装libgtk2.0-dev可能会导致冲突。更稳妥的做法是sudo apt-get install libgtk-3-dev然后在编译Bochs时使用./configure --with-gtkgtk31.3 被忽视的Python依赖现代Ubuntu系统中某些构建工具需要Python 3支持。如果遇到configure脚本报错可能需要sudo apt-get install python3-distutils2. Bochs 2.6.9编译时的常见错误即使依赖都安装正确编译Bochs本身也可能遇到各种问题。以下是我遇到的两个典型错误2.1 调试器支持导致的编译失败使用--enable-debugger选项时可能会遇到bx_debug/symbols.cc: In function void read_dsym_llvm(const char*): bx_debug/symbols.cc:584:10: error: struct llvm::object::SymbolRef has no member named getFlags解决方案是修改configure选项./configure --enable-debugger --enable-disasm --without-llvm2.2 过时的键盘映射配置在.bochsrc文件中传统的键盘映射配置keyboard: keymap/usr/local/share/bochs/keymaps/x11-pc-us.map在现代系统中可能失效。应该改为keyboard: typemf keyboard_serial_delay: 2503. GeekOS编译过程中的五个致命错误GeekOS的编译过程是最容易出问题的环节。以下是五个最常见的错误及其解决方法3.1 警告被视为错误首次运行make时最常见的错误cc1: all warnings being treated as errors解决方法是修改MakefileCC_GENERAL_OPTS : $(GENERAL_OPTS) # 移除-Werror3.2 栈保护导致的崩溃现代GCC默认启用栈保护这会导致GeekOS运行时崩溃。需要在Makefile中添加GENERAL_OPTS : -O0 -Wall -fno-stack-protector $(EXTRA_C_OPTS)3.3 软盘映像问题如果Bochs启动后只有黑屏很可能是软盘映像问题。检查.bochsrc中指定的fd.img路径是否正确确保编译后生成了fd.img文件使用file命令验证映像格式file fd.img # 应显示fd.img: DOS floppy 1440k, x86 hard disk boot sector3.4 NASM版本不兼容GeekOS 0.3.0需要特定版本的NASM。如果遇到汇编错误可以wget https://www.nasm.us/pub/nasm/releasebuilds/2.08.02/nasm-2.08.02.tar.gz tar -xzf nasm-2.08.02.tar.gz cd nasm-2.08.02 ./configure make sudo make install3.5 多线程导致的随机崩溃在高版本Ubuntu上GeekOS可能会随机崩溃。解决方法是在Makefile中GENERAL_OPTS : -O0 -Wall -fno-stack-protector -mno-sse -mno-sse2 $(EXTRA_C_OPTS)4. Bochs运行时的疑难杂症即使编译成功运行Bochs时也可能遇到各种奇怪问题4.1 黑屏但有弹窗报错如果Bochs窗口黑屏但弹出错误提示通常是ROM镜像路径错误 - 检查.bochsrc中的romimage: file/usr/local/share/bochs/BIOS-bochs-latest vgaromimage: file/usr/local/share/bochs/VGABIOS-lgpl-latest权限问题 - 尝试sudo chmod -R ar /usr/local/share/bochs/4.2 启动后立即退出如果Bochs启动后立即退出检查日志文件tail -n 50 bochsout.txt常见原因是缺少fd.img或配置错误。4.3 键盘输入无响应现代Linux系统可能需要特殊键盘配置。在.bochsrc中添加keyboard: typemf, serial_delay250, paste_delay1000005. 高级调试技巧当所有方法都失败时这些技巧可能会帮到你5.1 使用GDB调试Bochs首先以调试模式启动Bochsbochs -q -f .bochsrc然后在另一个终端gdb --tui bochs (gdb) target remote localhost:12345.2 检查内存布局在Bochs命令行界面(启动时选择[6]然后输入c)可以info mem info registers5.3 修改GeekOS源码打印调试信息在geekos-0.3.0/src/project0/build/geekos/main.c中添加Print(Debug: Reached line %d\n, __LINE__);然后重新编译运行。
http://www.rkmt.cn/news/1409804.html

相关文章:

  • 实战复盘:我是如何用Frida+IDA搞定一个手游外挂的so文件校验与修复的
  • 信号处理、PCA降维都离不开它:手把手图解‘能量守恒’在正交变换中的核心作用
  • 如何推导-cfd的误差和稳定性分析
  • 量子纠错码与被动解码技术解析
  • 零样本异常检测新思路:不用一张正常图片训练,MuSc方法如何利用测试图自身“投票”找出缺陷?
  • 量子变分电路在实时控制中的创新应用与实践
  • 别再浪费钢网了!嘉立创/捷配下单时,这个关于Mark点的勾选项你注意了吗?
  • 用Python实战处理KuaiRec数据集:从下载到构建稀疏矩阵的完整流程
  • 如何快速掌握暗黑破坏神2存档编辑器d2s-editor:面向单机玩家的完整指南
  • ThinkPad X1 Carbon 指纹识别在Ubuntu 20.04上复活记:从‘设备繁忙’报错到完美登录的保姆级排错指南
  • 【2026年华为暑期实习-非AI方向(通软嵌软测试算法数据科学)- 5月22日-第一题- 任意矩形图案解锁路径验证】(题目+思路+JavaC++Python解析+在线测试)
  • 避坑指南:无人机视觉项目坐标系转换的5个常见误区(从内参标定到NED定义)
  • LeetCode 144:二叉树的前序遍历 | 递归与迭代
  • 手把手教你用ATE测试I²C EEPROM:从PMU设置到图形文件编写的完整流程
  • 从测量铅笔到预测房价:最小二乘法在Excel和机器学习中的实战对比
  • 速腾聚创RS-M1激光雷达开箱实测:从拆箱到上电,新手避坑指南(附线缆改造建议)
  • 从Renren-Fast到微服务:手把手教你拆出公共Common模块(含依赖清单)
  • 从食材识别到营养配比,再到文化适配——ChatGPT食谱创作全流程拆解,手把手带练6类高转化场景
  • 从‘翻车’案例到优化方案:聊聊毫米波雷达天线罩那些坑(矩形vs弧形、泥水影响、PCB吸波结构)
  • 告别imgaug!用Roboflow给YOLOv8数据集做增强,5分钟搞定格式转换和扩增
  • 避障小车代码调试踩坑实录:HC-SR04测距不准、SG90舵机乱转?51单片机常见问题解决
  • 直播卡顿、花屏?从H.264的GOP、Slice到FLV封装的推流优化避坑指南
  • IC设计面试必考:边沿检测电路的5种变体与常见陷阱(附仿真对比)
  • 幻尔舵机控制板+STM32:从官方上位机到自定义动作组的无缝衔接实战
  • 数据结构学不会?试试用‘图书管理’这个例子把线性表(顺序表/链表)搞明白
  • AI 术语通俗词典:多头注意力
  • 告别RPM包!在Ubuntu 22.04上把Oracle 11g XE的安装包‘转正’成DEB格式
  • 从SE71到打印机:手把手调试SAPscript表单打印全过程(含LP01配置)
  • STM32飞控实战:如何构建稳定可靠的无人机控制系统
  • 合宙ESP32-C3的USB CDC和DIO模式,PlatformIO里到底怎么配?一次讲清