использование __attribute__ ((слабого)) приводит к предупреждению «избыточное объявление xxx», какой-либо способ избежать? - PullRequest
4 голосов
/ 09 мая 2011

Когда я использую __attribute__ ((weak)), как в этом посте , я получаю предупреждения от gcc о повторном выделении символа, в то время как все, что я делаю, это добавление атрибута. Может ли атрибут быть прикреплен по-другому? Предупреждения, которые я получаю, выглядят так:

threads.c:53: warning: redundant redeclaration of ‘pthread_once’
/usr/include/pthread.h:478: note: previous declaration of ‘pthread_once’ was here

Ответы [ 2 ]

3 голосов
/ 10 мая 2011

Да - GCC позволяет использовать #pragma weak для объявления символов слабыми, поэтому вы можете сделать это вместо этого:

#include <pthread.h>

#pragma weak pthread_create
#pragma weak pthread_mutex_init
#pragma weak pthread_mutex_lock
#pragma weak pthread_mutex_unlock 
#pragma weak pthread_mutex_destroy

/* ... code ... */

(задокументировано здесь .)

1 голос
/ 10 мая 2011

Вы можете использовать библиотеку заглушек pthread, такую ​​как http://cgit.freedesktop.org/xcb/pthread-stubs/, которая избавляет от необходимости создавать свои собственные заглушки.

Если вам нужно работать только на довольно современных системах, любая libcпредоставить набор заглушек для наиболее часто используемых функций, чтобы сделать потокобезопасным, или libpthread интегрирован в libc.Обратите внимание, что заглушки для pthread_once могут никогда не вызывать переданную функцию.(Некоторые библиотеки используют это, чтобы определить, находятся ли они в среде многопоточного или не поточного программирования.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...