gpt4 book ai didi

c++11 - 对 '__gthrw___pthread_key_create(unsigned int*, void (*)(void*)) 的 undefined reference

转载 作者:行者123 更新时间:2023-12-05 01:01:59 32 4
gpt4 key购买 nike

我正在使用 64 位 gcc-4.8.2 生成 32 位目标,而我的机器是 64 位。我正在使用 c++11 并发功能,例如线程、互斥锁、conditiona_variables 等。

链接器在尝试链接可执行文件时给出了上述错误消息。 libMyLib 也是该项目的一部分。

libMyLib.so: undefined reference to '__gthrw___pthread_key_create(unsigned int*, void (*)(void*))

nm libMyLib.so | grep pthread_key_create 显示:
U _ZL28__gthrw___pthread_key_createPjPFvPvE
w __pthread_key_create@@GLIBC_2.0

符号“ghtrw___pthread_key_create”来自哪里?我尝试添加 '-lpthread(-pthread)' 作为编译器标志,但它没有帮助。

更多信息。 nm libMyLib.so | grep pthread 显示定义了其他符号,例如 _ZL20__gthread_mutex_lockP15pthread_mutex_t

最佳答案

where is the symbol 'ghtrw___pthread_key_create' from?



它在 GCC 的线程原语的“gthreads”抽象层中定义,在 gthr-posix.h 中。标题。
#if SUPPORTS_WEAK && GTHREAD_USE_WEAK
# ifndef __gthrw_pragma
# define __gthrw_pragma(pragma)
# endif
# define __gthrw2(name,name2,type) \
static __typeof(type) name __attribute__ ((__weakref__(#name2))); \
__gthrw_pragma(weak type)
# define __gthrw_(name) __gthrw_ ## name
#else
# define __gthrw2(name,name2,type)
# define __gthrw_(name) name
#endif

/* Typically, __gthrw_foo is a weak reference to symbol foo. */
#define __gthrw(name) __gthrw2(__gthrw_ ## name,name,name)

...

#ifdef __GLIBC__
__gthrw2(__gthrw_(__pthread_key_create),
__pthread_key_create,
pthread_key_create)

预处理后扩展为:
static __typeof(pthread_key_create) __gthrw___pthread_key_create __attribute__ ((__weakref__("__pthread_key_create")));

它应该是对 __pthread_key_create 的弱引用,所以它永远不应该有定义,因为它只是对 glibc 内部 __pthread_key_create 的引用象征。

因此,您构建库的方式似乎出了点问题。你不应该有一个未定义的弱符号。

关于c++11 - 对 '__gthrw___pthread_key_create(unsigned int*, void (*)(void*)) 的 undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27257655/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com