如何使用 clang 将 crtbegin.o 和 crtend.o 链接到我的 32 位操作系统

问题描述

最近我一直在玩弄一个 x86 操作系统,并决定将它从使用 GCC 交叉编译器转换为使用 clang。具体来说,我让 Makefile 使用 clang -target i386-pc-none-m32。经过一番挣扎,我终于设法通过了编译阶段并进入了链接阶段,但是我收到了这个错误

/usr/bin/ld: i386:x86-64 architecture of input file `arch/i386/crtbegin.o' is incompatible with i386 output
/usr/bin/ld: i386:x86-64 architecture of input file `arch/i386/crtend.o' is incompatible with i386 output

请注意,这两个文件在我的操作系统上实际上并不存在,只是在编译器构建过程中的某个时间点放在那里(我在 Makefile 中特别告诉它这样做)。但是,即使我有 -m32-target 标志并且还安装了 32 位 libc(不过,我的操作系统是 64 位),它也不会尝试链接 32 位版本.我该如何解决这个问题?

系统 crtbegin 和 crtend 是否应该使用?太晚了,想不起来了。

感谢所有帮助,如果需要,我可以提供更多信息和来源,谢谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)