听说FreeNOS是个微内核操作系统,且用C++编写,很适合学习操作系统和C++,于是准备研究下,但第一步编译就遇到好多坑,现在汇总如下:
坑1:
从GitHub的https://github.com/nieklinnenbank/FreeNOS?? 下载FreeNOS源码,发现不同版本的源码目录有的有site_scons目录,有的没有,如下为:master版本的目录结构如下:
master版本的没有site_scons目录,编译时报如下错误:
scons: Building targets ...
ISO build/intel/pc/boot.iso
grub-mkrescue: error: /usr/lib/grub/i386-pc/modinfo.sh doesn't exist. Please specify --target or --directory
解决方法参见 《编译FreeNOS报/usr/lib/grub/i386-pc/modinfo.sh doesn‘t exist错误》。
如下为版本为0.0.4的目录,可以看到存在site_scons目录。
?存在site_scons目录,编译时不会报:
grub-mkrescue: error: /usr/lib/grub/i386-pc/modinfo.sh doesn't exist. Please specify --target or --directory
?错误,但是在后续编译时会报:
unsupported instruction ‘mov’
错误,也就是64位的机器不支持32位的汇编,网上找了各种资料都不行,有网友说装个32为的linux系统就可以,但现在主流的如Ubuntu等都不对32位支持、不提供镜像文件了,这个问题至今没有很好的办法解决。建议:还是采用无site_scons目录的版本,按照上文的方法解决掉modinfo.sh doesn't exist的错误后就可以编译通过。
坑 2:
编译过程中出现警告错误,这个错误一般是对有site_scons目录的版本才会出现。即g++把所有warnings当作Error, 解决方法如下:
在site_scons目录下的build.py中,去掉(注释或者删除)关于-Werror,如下:
坑 3:
编译过程出现如下错误:
error: ‘operator new’ takes type ‘size_t’ (‘long unsigned int’) as first parameter [-fpermissive]
这个错误一般是对有site_scons目录的版本才会出现。在site_scons目录下的build.py中,将编译选项加入-fpermissive即可,如下:
坑 4:ImportError: No module named pysvn:
解决方法:sudo apt-get install python-svn
|