2012-12-18 21 views
6

Próbuję użyć __atomic_load_n ze strony gccatomic builtins, kompilacja zKorzystanie z wbudowanych atomowych gcc?

gcc -Wall -march=i686 -std=gnu99 ll.c -o ll 

ale to mówi mi, że nie może

warning: implicit declaration of function ‘__atomic_load_n’ 

Myślałem, że to wystarczy, aby zapewnić gcc z arch i flagi march (i upewnić się, ustawiając flagę std=gnu99), ale bez skutku. W rzeczywistości, nawet jeśli testuję wspólne makra lub __GNUC__, nie wydaje mi się, żeby miały wartości ... ale mam dość waniliową instalację gcc, która jest dostępna w Unbuntu.

Wiem, że robię coś głupiego, ale nie wiem, co. Mam gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3

Kod wygląda następująco: jest to funkcja, która nigdy nie jest wywoływana (jeszcze), więc problem jest w trakcie kompilacji.

type* func(type* p) { 
    type* q = __atomic_load_n (p, __ATOMIC_SEQ_CST); 
} 
+0

Czy możesz pokazać nam kod, który powoduje błąd? – NPE

+0

@NPE: na pewno pytania zostały zaktualizowane. –

+1

Mogę skompilować twój kod bez problemu (gcc 4.7.2), gdy tylko wpiszesz 'typ' na' int'. Jeśli podejrzewasz problem z instalacją kompilatora, być może spróbuj zbudować z nim projekt inny niż triwalny, ale czysty, aby zobaczyć, co się stanie? – NPE

Odpowiedz

13

Aż GCC 4.6.3, kompilator Zabudowy dla operacji atomowych były czyste rozszerzenie kompilatora GCC i zostały one pogrupowane w rodziny funkcji __sync_*.

Od wersji 4.7.0 zarówno nowe standardy C++ 11, jak i C11 zostały sfinalizowane, a GCC zaktualizował swoje wbudowane elementy atomowe, aby lepiej odzwierciedlały nowy model pamięci tych dwóch nowych wersji językowych. Nowe funkcje są zgrupowane w rodzinie __atomic_*.

Jednak starsze Zabudowy są still available i documentation mówi tak:

Jest zawsze bezpieczne zastąpić __sync połączenia z __atomic rozmowy przy zastosowaniu modelu __ATOMIC_SEQ_CST pamięci.

+0

Chociaż '__ATOMIC_SEQ_CST' jest zawsze poprawny, może dać ci całkiem suboptymalne wyniki, w zależności od modelu pamięci twojego procesora. –

+0

Dzięki, dobrze odpowiedział! –

Powiązane problemy