2012-01-20 44 views
0

我有全局變量sigemptyset()的覆蓋下一個變量

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選項。

+1

您能否包含具有此問題的最小*完整*示例? – NPE

+0

是的,我做了必要的修改 – user919082

+0

也許你的頭文件是用於其他庫(例如glibc或newlib),而不是uClibc,或者你已經用glibc或newlib鏈接,但是使用的是uClibc頭文件。 – nos

回答

0

您展示struct sigaction act的一個陣列,但在你的代碼提siginfo變量,而不是act

可以siginfo被宣佈爲之前是一個數組嗎?你能說明這個功能在做什麼嗎?

+0

對不起,我的錯誤是int a [10]; struct sigaction act; int b [10]; – user919082

+0

如果我使用'mips-linux-gnu-gcc -static -o signal_ signal/signal.c'編譯我的代碼,那就沒有問題了,不知道是什麼編譯器選項導致問題 – user919082

+0

@ user919082:int a [ 10]; struct sigaction act; int b [10];是在你的問題相同的代碼。 **你可以發佈一個更完整的例子**來展示什麼是'siginfo'和'sigemptyset()'在做什麼? – Seki

0

我找到了答案 我不跟-muclibc選項

mips-linux-gnu-gcc -G 0 -msoft-float -static -muclibc -o signal signal.o 

連接將解決這個問題

所以在編譯時它正在使用sigset.h從uClibc中,並在執行它 執行代碼從libc(signal.c sigemptyset()

如果你進一步深入_SIGSET_NWORDS爲4,而對於x86它是32 所以sigemptyset()運行32次迭代而不是4