我有全局变量
int a[10];
struct sigaction act;
int b[10];
每当我打电话的时候
sigemptyset(&act.sa_mask);
数组a
正在损坏。我怀疑这是否是编译器问题。我使用的是CodeSourcery mips-linux-gnu-gcc版本4.5.2.我使用
mips-linux-gnu-gcc -c -g -muclibc -pedantic -Wno-declaration-after-statement -std=gnu99 -G 0 -mips2 -msoft-float -mno-memcpy -fomit-frame-pointer -pipe -Wall -Wstrict-prototypes signal/signal.c
mips-linux-gnu-gcc -G 0 -msoft-float -static -o signal signal.o
我的完整代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>
int a[10];
struct sigaction act;
int b[10];
int main ();
int main ()
{
int i;
//initialize a and b
for(i = 0 ; i < 10;i++)
{
a[i]=1;b[i]=1;
}
sigemptyset(&act.sa_mask);
//print
for(i = 0 ; i < 10;i++)
{
printf("%d %d ",a[i],b[i]);
}
return 0;
}
我发现使用-muclibc
选项编译会导致这个问题。
发布于 2012-01-20 12:12:31
您在a数组之后显示了struct sigaction act
,但是在代码中您提到了一个siginfo
变量,而不是act
。
可以在a数组之前声明siginfo
吗?你能展示一下这个功能是干什么的吗?
发布于 2012-01-23 11:27:22
我找到了我没有链接到-muclibc选项的答案
mips-linux-gnu-gcc -G 0 -msoft-float -static -muclibc -o signal signal.o
会解决这个问题
因此,在编译时,它是使用uclibc中的sigset.h,在执行时是从libc(signal.c sigemptyset()
)执行代码。
如果进一步分析mips的_SIGSET_NWORDS
是4,而对于x86是32,那么sigemptyset()
运行32次迭代而不是4次。
https://stackoverflow.com/questions/8941156
复制相似问题