我试图让工作人员检查工作,但没有成功。我收到以下错误:
/ tmp / cczxKZzn.s:汇编程序消息:
/ tmp / cczxKZzn.s:48:错误:'push'的指令后缀无效
/ tmp / cc9xD8T3.s:125:错误:'pop'的指令后缀无效
当我的makefile看起来像这样时(使用简单的makefile,一切都可以正确编译):
all: error check
error: error.c
/usr/local/gcc-4.0.2/bin/gcc -fbounds-checking -g -Wall -pedantic $< -o $@
.PHONY: clean check
clean:
-rm error
check: error
./error
由于该代码与汇编程序无关,所以我不知道该怎么办。我可以在Google搜索中看到关于汇编程序问题的唯一问题。
您能否提出其他解决方案,例如检查是否在阵列之外?如(这是我的错误。c):
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a[1][10];
a[0][11]=42;
return 0;
}
编辑。可以是版本不兼容吗?安装了gcc 4.4+,我正在通过一些经过修改的gcc 4.0.2的路径来执行此操作?
由于该代码与汇编器无关,所以我不知道该怎么做。做。我只能在Google搜索中看到汇编程序问题关于该主题。
看起来您正在调用错误的汇编器-32位汇编器,试图编译64位目标代码。检查您的PATH和标志。
UPDATE:我从未研究过gcc究竟如何调用其组件。我还是不太清楚。无论如何,看起来它并不像我所相信的那样依赖PATH,而是依赖于它的./configure设置(--prefix,-build等)。
矿井,--prefix=/usr
,-build = x86_64-suse-linux,-program-suffix = -4.6, looks for its components in (with respect to the directory where the
gcc`二进制文件位于:-../lib64/gcc/x86_64-suse-linux/4.6-../lib64/gcc/-../lib64/gcc/x86_64-suse-linux/4.6/../../../../x86_64-suse-linux/bin/x86_64-suse-linux/4.6/-../ lib64 / gcc / x86_64-suse-linux / 4.6 /../../../../ x86_64-suse-linux / bin /
((用strace
选中)。
是来自其中一个目录中另一个gcc的二进制文件,它将被调用而不是'正确'的二进制文件。
尝试用gcc -v
(或用strace
检查)以查看正在运行哪个as
。>>
[如果有人仍然需要使用此古老的gcc版本进行边界检查:最好的办法是告诉它使用-Wa,--32
将相关参数传递给汇编器,因此您将需要以下代码: