中文
注册

找不到符号perl_tsa_mutex_lock

错误信息

Can't load 'xxx.so' for module threads: xxx.so: undefined symbol: perl_tsa_mutex_lock at xxx

问题介绍

在文件/usr/lib64/perl5/CORE/perl.h中有如下的定义:

##if ... 
    defined(__clang__) 
    ... 
##  define PERL_TSA__(x)   __attribute__((x)) 
##  define PERL_TSA_ACTIVE 
##else 
##  define PERL_TSA__(x)   /* No TSA, make TSA attributes no-ops. */ 
##  undef PERL_TSA_ACTIVE 
##endif 
 
##ifdef PERL_TSA_ACTIVE 
EXTERN_C int perl_tsa_mutex_lock(perl_mutex* mutex) 
  PERL_TSA_ACQUIRE(*mutex) 
  PERL_TSA_NO_TSA; 
EXTERN_C int perl_tsa_mutex_unlock(perl_mutex* mutex) 
  PERL_TSA_RELEASE(*mutex) 
  PERL_TSA_NO_TSA; 
##endif##endif

由于针对Clang使用的mutex相关的符号是有线程安全标记的perl_tsa_*,但是libperl.so并不包含这些符号,故而出现链接错误。

解决方案

  • 使用包含perl_tsa_*符号的libperl.so(在编译libperl.so时,加上宏USE_ITHREADSI_PTHREAD);
  • 去除预定义宏__clang__:
clang -U__clang__ ...
搜索结果
找到“0”个结果

当前产品无相关内容

未找到相关内容,请尝试其他搜索词