You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

启用Thread Sanitizer构建的静态库链接时出现__tsan_...未定义引用

解决PDFium TSAN静态库链接错误问题

针对__tsan_memcpy未定义的链接错误

  • 必须保证测试项目与PDFium使用完全相同版本的Clang编译器,Thread Sanitizer的符号与编译器版本强绑定,跨版本会出现符号不兼容。
  • 不要仅在编译阶段添加-fsanitize=thread,链接阶段也需要该选项。修改CMakeLists.txt,在定义可执行文件后添加:
    target_compile_options(Test PRIVATE -fsanitize=thread)
    target_link_options(Test PRIVATE -fsanitize=thread)
    
    或者在cmake配置时统一指定:
    cmake -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ \
          -DCMAKE_C_FLAGS="-fsanitize=thread" \
          -DCMAKE_CXX_FLAGS="-fsanitize=thread" \
          -DCMAKE_EXE_LINKER_FLAGS="-fsanitize=thread" ..
    

针对Clang17升级后std::__Cr::__libcpp_verbose_abort未定义的错误

这是因为PDFium构建时默认使用自带的libc++,而测试项目可能使用了系统的libstdc或不匹配的libc版本,解决方案:

  • 强制测试项目使用libc++编译链接,在CMakeLists.txt中添加:
    target_compile_options(Test PRIVATE -stdlib=libc++)
    target_link_options(Test PRIVATE -stdlib=libc++)
    
  • 显式链接PDFium依赖的系统库,静态库不会自动传递依赖,需要手动添加:
    target_link_libraries(Test PRIVATE pdfium pthread dl)
    
  • 确保测试项目的Clang版本与构建PDFium的版本完全一致,避免libc++的版本差异。

内容的提问来源于stack exchange,提问作者mathripper

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 01:44:56