将程序集 .s 与 gcc 错误链接

Posted

技术标签:

【中文标题】将程序集 .s 与 gcc 错误链接【英文标题】:Linking assembly .s with gcc errors 【发布时间】:2016-04-29 13:26:14 【问题描述】:

您好,我在将“.s”文件链接在一起时遇到了几个错误。

首先,我通过"gcc -S -m32 search.c"编译文件到 获取我的 32 位汇编代码。

其次,我想使用 "gcc -o 将程序重新链接在一起 搜索 search.s"

如果我这样做,我会收到以下错误:“错误:`push 的指令后缀无效。” 我尝试使用 google 解决问题并使用 --32 找到了解决方案选项标志。但这也不起作用。结果显示以下错误: usr/bin/ld: 输入文件的 i386 架构与 i386:x86-64 输出不兼容。第三个选项是将 .code32 添加到 .s 文件中,gcc 让我编译它。虽然通过执行控制台立即说“核心转储”。

所以我现在真的不知道该怎么办。任何人都知道我是如何让事情正常进行的吗?

干杯

【问题讨论】:

您也应该使用-m32 进行链接。 哈哈,就是这么简单。非常感谢! Assembling 32-bit binaries on a 64-bit system (GNU toolchain)的可能重复 【参考方案1】:

--32 组装,并与-m32 链接。

gcc -m32 -o search search.s

没有-m32,输出将是一个64位的可执行文件。错误消息是由于输入对象是 32 位对象;您无法从 32 位对象生成 64 位可执行文件。

【讨论】:

以上是关于将程序集 .s 与 gcc 错误链接的主要内容,如果未能解决你的问题,请参考以下文章

如何使用gcc编译到程序集

我可以将 x86 程序集的 Intel 语法与 GCC 一起使用吗?

GCC 生成的程序集 - C 函数调用时的段错误

gcc的奇怪/错误的程序集输出?

总线错误:Mac OS X 上带有 GCC 的内联 x86 程序集

按引用和按值传递时的 gcc 程序集