破碎细胞 发表于 2008-03-30 16:31

[已解决]请教一个在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 i386:x86-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 编辑 ]

albcamus 发表于 2008-03-31 15:31

gcc -m32

破碎细胞 发表于 2008-03-31 21:43

回复 #2 albcamus 的帖子

谢谢你的回复阿。

我这样的,可是出现错误了,不知道我哪里有不对,请指教:
$ 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

破碎细胞 发表于 2008-04-02 20:55

自己顶一下,等待高手

mingyanguo 发表于 2008-04-03 00:44

交叉编译似乎没这么简单,我都是找相关平台的binutils来编译。

破碎细胞 发表于 2008-04-03 11:58

原帖由 mingyanguo 于 2008-4-3 00:44 发表 http://linux.chinaunix.net/bbs/images/common/back.gif
交叉编译似乎没这么简单,我都是找相关平台的binutils来编译。

可x86-64和x86本来就是兼容阿,应该不像一般的交叉编译那么麻烦吧。

mik 发表于 2008-04-04 01:26

建议看看 clfs 相关的文档吧,很详细的

破碎细胞 发表于 2008-04-04 11:51

原帖由 mik 于 2008-4-4 01:26 发表 http://linux.chinaunix.net/bbs/images/common/back.gif
建议看看 clfs 相关的文档吧,很详细的
奥~~~好的,我试试先,谢谢你的回复。

albcamus 发表于 2008-04-08 17:59

我很好奇, gcc -m32 hello.c你试过了吗?我可是一直这么用的,包括编译MPlayer等大型开源软件。


CC='gcc -m32' ./configure --prefix=/usr
make && make install
页: [1]
查看完整版本: [已解决]请教一个在x86_64平台下编译出x86_386格式文件的问题