---
title: 找不到符号perl_tsa_mutex_lock
description: "```"
url: https://www.hikunpeng.com/document/detail/zh/kunpengdevps/compilation/ug-bisheng/kunpengbisheng_06_0049.html
sourcePath: /source/zh/kunpengdevps/compilation/ug-bisheng/kunpengbisheng_06_0049.html
indexId: d469acb5fc54ad52ff406e6150d2253c15891e11f2b2ea368bdd99a5f209332074
---
# 找不到符号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_ITHREADS和I_PTHREAD）；
- 去除预定义宏__clang__：
  1 clang -U__clang__ ...
