【问题标题】:Error: invalid instruction suffix for `push'错误:“push”的指令后缀无效
【发布时间】:2013-10-21 05:13:30
【问题描述】:

我在编译程序时遇到了问题。我不确定这些是什么意思,如果有人能提供帮助,我将不胜感激。

C:\Users\Joshua\Documents\GitHub\Zeus-TSO\_deps\libmpg123\dct64_sse.S: Assembler
 messages:
C:\Users\Joshua\Documents\GitHub\Zeus-TSO\_deps\libmpg123\dct64_sse.S:41: Error:
 invalid instruction suffix for `push'
C:\Users\Joshua\Documents\GitHub\Zeus-TSO\_deps\libmpg123\dct64_sse.S:46: Error:
 invalid instruction suffix for `push'
C:\Users\Joshua\Documents\GitHub\Zeus-TSO\_deps\libmpg123\dct64_sse.S:449: Error: invalid instruction suffix for `pop'
C:\Users\Joshua\Documents\GitHub\Zeus-TSO\_deps\libmpg123\dct64_sse.S:451: Error: invalid instruction suffix for `pop'
_deps\libmpg123\CMakeFiles\libmpg123_static.dir\build.make:378: recipe for targe
t '_deps/libmpg123/CMakeFiles/libmpg123_static.dir/dct64_sse.S.obj' failed
mingw32-make[2]:  [_deps/libmpg123/CMakeFiles/libmpg123_static.dir/dct64_sse.
S.obj] Error 1
CMakeFiles\Makefile2:225: recipe for target '_deps/libmpg123/CMakeFiles/libmpg12
3_static.dir/all' failed
mingw32-make[1]:  [_deps/libmpg123/CMakeFiles/libmpg123_static.dir/all] Error
 2
Makefile:74: recipe for target 'all' failed
mingw32-make:  [all] Error 2

【问题讨论】:

  • 如果您发布它所引用的代码,这将非常有帮助 - 至少是第 41、46、449 和 451 行 - 最好是围绕它的几行......

标签: c++ assembly mingw nasm


【解决方案1】:

您似乎正在尝试使用 64 位汇编程序构建 32 位汇编代码。

你有两个选择:

  1. 使用 32 位汇编程序,例如通过使用 --32 选项;
  2. 通过替换 64 位(扩展)寄存器(例如 %rax)来更改代码,而不是与 push/pop 指令一起使用的 32 位寄存器(例如 %eax)。

由于构建系统似乎是 CMake,我建议您参考此 manual,了解如何在 CMake 中为各种 Assembly 方言配置构建。

你可以试试:

set(CMAKE_ASM_FLAGS "--32")

但我还没有测试过。

【讨论】:

  • 我不确定在哪里添加 --32 选项。我在任何地方都找不到可以让我为汇编程序定义选项的文件。
  • 更新了,看看吧。
  • 出于好奇,我把Mingw改成了32bit,用32bit编译。我们现在回到不兼容的错误。
  • 您能否提供更多关于您正在编译的内容以及您想要实现的目标的信息,否则您很难跟踪您面临的问题,更难以提出任何解决方案。
猜你喜欢
  • 2020-01-19
  • 2014-03-07
  • 2023-03-14
  • 2019-10-18
  • 1970-01-01
  • 2011-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多