LINUX.ORG.RU

pthread_barrier_t


0

0

Здравствуйте! Столкнулся со следующей проблемой: При компиляции проекта, под gcc 4.1.1 (fedora) проект компилируется. При компиляции под gcc 3.3.3 (SuSE) не копмилируется... Ругается на pthread_barrier_t "pthread_barrier_t' undeclared (first use in this function)" Если добавить перед pthread_barrier_t struct то все приходит в норму. Но тогда под федорой печатает на этих местах ворнинги...

Смотрел pthread_types.h под SuSE: " typedef struct { struct _pthread_fastlock __ba_lock; /* Lock to guarantee mutual exclusion */ int __ba_required; /* Threads needed for completion */ int __ba_present; /* Threads waiting */ _pthread_descr __ba_waiting; /* Queue of waiting threads */ } pthread_barrier_t; "

под Fedora: " typedef union { char __size[__SIZEOF_PTHREAD_BARRIER_T]; long int __align; } pthread_barrier_t; "

Не пойму как удовлетворить оба компилятора. Хочется чтобы небыло ни ворнингов ну и естественно ошибок:)))

Спасибо!

> Если добавить перед pthread_barrier_t struct то все приходит в норму. Но тогда под федорой печатает на этих местах ворнинги...

покажи реальный код дословно.

dilmah ★★★★★
()
Ответ на: комментарий от dilmah

Я проще сделал. Написал тестик:) test.c

#include <pthread.h>

int main() { pthread_barrier_t *barr;

pthread_barrier_init(barr,NULL,2);

return 0;

}

Компиляция под SuSE: test2:~/agg/test # gcc test.c -o test -lpthread test.c: In function `main': test.c:5: error: `pthread_barrier_t' undeclared (first use in this function) test.c:5: error: (Each undeclared identifier is reported only once test.c:5: error: for each function it appears in.) test.c:5: error: `barr' undeclared (first use in this function)

Компиляция под fedora проходит без ошибок.

Изменяем так #include <pthread.h>

int main() { struct pthread_barrier_t *barr; //Добавили struct

pthread_barrier_init(barr,NULL,2);

return 0;

}

Теперь под SuSE проходит без ошибок

Под fedora: [andrey@hpdev agent-test]$ gcc test.c -o test -lpthread test.c: In function &#8216;main&#8217;: test.c:7: warning: passing argument 1 of &#8216;pthread_barrier_init&#8217; from incompatible pointer type

Вот так вот ... Не ужели на столько разные библиотеки pthread?

deandroid
() автор топика
Ответ на: комментарий от deandroid

первый вариант правильный. Никаких struct добавлять не нужно.

То что он не компилируется под сусе -- это баг сусе. Я думаю достаточно добавить #include <sys/types.h> или <pthread_types.h> или что-то в этом роде.

dilmah ★★★★★
()
Ответ на: комментарий от dilmah

Эх не помогают инклуды :( Не красиво получается :(.

deandroid
() автор топика
Ответ на: комментарий от dilmah

Блин заметил что у сусе есть в /usr/include папочка nptl там заголовочные файлы pthread такие же как у федоры:) подключил эти файлы но ситуация не изменилась! Но заметил что typedef структуры защищен конструкцией: #ifdef __USE_XOPEN2K

Может где-то в недрах Сусе нет определения __USE_XOPEN2K? Но если его вручную определить, то ни чего не меняется. Где-то он точно переопределяется.

Может глюк gcc 3.3.3

deandroid
() автор топика
Ответ на: комментарий от BreadFan

Спасибо большое, помогло! А я искал, искал и :) почему-то не нашел.

deandroid
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.