6

嗨,我正在尝试在我的计算机中编译简单的 C 程序,并且在编译时我从终端下得到了类似的消息 [参见图片],说明了某种汇编错误。我不知道这是否是计算机内存/堆栈问题(尽管我已经重新启动了计算机)或其他任何问题,但我可以肯定的是,过去几天我一直在以相同的方式编译 C 程序。

代码:

   #include <stdio.h>
   main(){
      printf("hello");
   }

输出:

/tmp/cconajAc.s:汇编程序消息:/tmp/cconajAc.s:9:错误:后缀或操作数对“推送”无效

请告诉我如何解决这个问题!

已编辑:我刚刚从另一个计算机实验室房间的工作站更换,它工作正常,没有任何组装错误。我的猜测是安装在其他实验室的那些计算机中的开发工具有错误。我想现在这对我有用,尽管知道我在另一台计算机中遇到的问题的根源会很有趣。

4

5 回答 5

1

该错误似乎很奇怪,但请尝试在您的main():中添加返回类型int main()

于 2012-11-04T22:21:26.827 回答
1

在 vi 编辑器中编写并将文件保存为“hello.c”:

 #include <stdio.h>
 int main() {   printf("hello");   return 0; }

检查您是否安装了 32 位 glibc 头文件。
在 ubuntu 中试试这个来安装:
# apt-get install gcc-multilib

然后尝试:
# gcc -m32 -o hello hello.c

# gcc Wa,--32别的

# gcc -m32 --32

于 2012-11-04T22:38:08.280 回答
0

如果它对其他人有帮助,对我来说,这似乎是由不匹配的工具链组件引起的——我有时必须获取修改我的外部点文件PATH(为了满足复杂的构建系统,叹息)。汇编器是/usr/bin/as,但是gcc是一些古老的版本。

于 2014-08-20T00:29:45.963 回答
0

运行 gcc 时您在哪个 shell 中?

尝试切换到 tcsh/csh。我在 bash 中遇到了同样的错误并将 shell 切换到 tcsh。

于 2014-11-21T02:04:08.363 回答
0

错误:“push”的后缀或操作数无效

检查您的系统架构:

# arch
x86_64   

# arch
i386

或者使用这个:

#uname -m 
x86_64

在汇编中:32 位(i386):

pushl instruction  ;notice the suffix is l

64位(x86_64):

pushq instruction  ;notice the suffix is q

我想知道你的系统的arch是x86_64,当你使用32位的指令时会出现这个错误。要解决这个问题:

#gcc -m32 -o test test.c

请参阅何时应使用 gcc 的 -m32 选项?

于 2014-08-20T03:19:27.433 回答