当我在this post中使用__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
答案 0 :(得分:3)
是 - 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 ... */
(记录here。)
答案 1 :(得分:1)
您可以使用像http://cgit.freedesktop.org/xcb/pthread-stubs/那样的pthread存根库,这样就无需创建自己的存根。
如果你只需要在相当现代的系统上运行,libc将为大多数常用函数提供一组存根,以使线程安全或libpthread集成到libc中。请注意,pthread_once
的存根可能无法调用传递的函数。 (有些库使用它来检测它们是否在线程或非线程编程环境中。)