5

我正在尝试使用 gcc 编译器在 Code::Blocks 中编译一个旧的 C++ 软件项目,在修复了一些其他问题之后,我碰壁了:该项目有一个英特尔风格的内联 ASM 文件,写为

_asm {
  code here
}

并且编译器拒绝使用“错误:'_asm'未在此范围内声明”进行编译。

我花了一段时间谷歌搜索寻找解决方案,但我唯一能找到的就是添加-masm=intel到构建选项(我已经尝试过但无法工作),或者将代码转换为asm ("code here");(由于 ASM 的数量庞大,这是不可行的)。有谁知道我怎样才能让 gcc 按原样编译这段代码,还是我应该放弃并使用不同的编译器?

4

2 回答 2

2

GCC 对内联汇编器使用非常不同的语法,因此您将无法通过微不足道的更改来处理它。我看到以下选项:

  1. 用 GCC 语法或 C 代码重写所有内容
  2. 制作一些脚本以转换为 GCC 语法(不平凡的任务)
  3. 使用为它编写的任何编译器编译代码(MSVC?)
于 2012-06-28T11:26:56.997 回答
0

您根本无法让 gcc “按原样”编译代码。如果你需要使用 gcc 编译这个东西,你必须用 C++ 或 gcc 兼容的 asm 重写代码。如果确实有很多汇编代码——比如说,200 条或更多指令——那么学习 gcc 汇编语法可能是值得的;如果没有,请用 C++ 编写代码。

于 2012-06-28T14:13:38.657 回答