2012-01-20 3 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]; акт структурной реакции; 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())

и если вы digdown дальнейшего _SIGSET_NWORDS для трудоемкости является 4, а для x86 это 32 так sigemptyset() работал для 32-итераций вместо 4

Смежные вопросы