将程序集 .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 错误链接的主要内容,如果未能解决你的问题,请参考以下文章
我可以将 x86 程序集的 Intel 语法与 GCC 一起使用吗?