您好我正在尝试在我的计算机中编译简单的C程序,并在编译时从终端[见图像]下获得类似的消息,说明某种程序集错误。我不知道这是一个计算机内存/堆栈问题(虽然我已经重新启动了我的计算机)或其他任何东西,但我确切知道的是,我过去几天一直在以相同的方式编译C程序。
代码:
#include <stdio.h>
main(){
printf("hello");
}
输出:
/tmp/cconajAc.s:汇编程序消息: /tmp/cconajAc.s:9:错误:后缀或操作数对于'push'无效
请告诉我如何解决这个问题!
编辑:我刚从工作站换到另一个计算机实验室,它工作正常,没有任何装配错误。我的猜测是在另一个实验室的那些计算机中安装的开发工具中出错。我想现在这对我有用,虽然知道我在另一台计算机上出现问题的根源会很有趣。
答案 0 :(得分:1)
错误似乎很奇怪,但请尝试向main()
添加退货类型:int main()
。
答案 1 :(得分: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
答案 2 :(得分:0)
如果它对其他人有帮助,对我来说,这似乎是由不匹配的工具链组件引起的 - 我有时必须使用外部dotfiles来修改我的PATH
(为了满足复杂的构建系统,叹息)。汇编程序是/usr/bin/as
,但gcc
是一些古老的版本。
答案 3 :(得分: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
我想知道你的sys的arch是x86_64,当你使用32bit的指令时它会引发这个错误。 要解决这个问题:
#gcc -m32 -o test test.c
答案 4 :(得分:0)
运行gcc时你在哪个shell?
尝试切换到tcsh / csh。我在bash中遇到同样的错误并将shell切换到tcsh。