[已解决]请教一个在x86_64平台下编译出x86_386格式文件的问题
小弟我在学习操作系统相关的课程。正在尝试着自己写个简单的操作系统。
可是遇到了一点问题。
我的开发平台是Linux x86_64
现在要用nasm编译并链接出一个elf-i386格式的二进制文件。
我这样做:
nasm -f elf kernel.asm -o kernel.o
ld -s kernel.o -o kernel
可是总是提示:
ld: i386 architecture of input file `boot2.o' is incompatible with i38686-64 output
我查了下资料,貌似ld的-oformat这个参数可以指定输出的格式
于是我这样:
ld -s -oformat=elf32-i386 kernel.o -o kernel
可是还是不行,请问正确的方法是什么阿?
我解决了,是这样做的:
因为我只要一个能产生i386格式的ld,我直接下了个 x86的ld
http://debian.cn99.com/ubuntu/pool/main/b/binutils/
然后直接运行了这个,就搞定了。
[ 本帖最后由 破碎细胞 于 2008-4-6 22:36 编辑 ]
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
gcc -m32
谢谢你的回复阿。
我这样的,可是出现错误了,不知道我哪里有不对,请指教:
$ gcc -m32 boot2.o
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.1.3/libgcc.a when searching for -lgcc
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.1.3/libgcc.a when searching for -lgcc
/usr/bin/ld: cannot find -lgcc
collect2: ld returned 1 exit status
自己顶一下,等待高手
交叉编译似乎没这么简单,我都是找相关平台的binutils来编译。
可x86-64和x86本来就是兼容阿,应该不像一般的交叉编译那么麻烦吧。
建议看看 clfs 相关的文档吧,很详细的
奥~~~好的,我试试先,谢谢你的回复。
我很好奇, gcc -m32 hello.c你试过了吗? 我可是一直这么用的,包括编译MPlayer等大型开源软件。
CC='gcc -m32' ./configure --prefix=/usr
make && make install