0
点赞
收藏
分享

微信扫一扫

Mac下pdf2docx,ImportError: dlopen(xxx/fitz/_fitz.xxx.so, 2):Symbol not found: ____chkstk_darwin

汤姆torn 2022-03-12 阅读 114
pythonmacos

问题描述: 在Mac系统下使用pdf2docx将PDF转换成word文档时,报错ImportError: dlopen(/Users/mac/opt/anaconda3/lib/python3.7/site-packages/PyMuPDF-1.19.6-py3.7-macosx-10.13-x86_64.egg/fitz/_fitz.cpython-37m-darwin.so, 2): Symbol not found: ____chkstk_darwin,以下是完整的报错信息:

Traceback (most recent call last):
  File "/Users/mac/PycharmProjects/pdf-word/pdf-to-word.py", line 1, in <module>
    from pdf2docx import Converter
  File "/Users/mac/opt/anaconda3/lib/python3.7/site-packages/pdf2docx-alpha-py3.7.egg/pdf2docx/__init__.py", line 1, in <module>
    from .converter import Converter
  File "/Users/mac/opt/anaconda3/lib/python3.7/site-packages/pdf2docx-alpha-py3.7.egg/pdf2docx/converter.py", line 7, in <module>
    import fitz
  File "/Users/mac/opt/anaconda3/lib/python3.7/site-packages/PyMuPDF-1.19.6-py3.7-macosx-10.13-x86_64.egg/fitz/__init__.py", line 10, in <module>
    from fitz.fitz import *
  File "/Users/mac/opt/anaconda3/lib/python3.7/site-packages/PyMuPDF-1.19.6-py3.7-macosx-10.13-x86_64.egg/fitz/fitz.py", line 15, in <module>
    from . import _fitz
    
ImportError: dlopen(/Users/mac/opt/anaconda3/lib/python3.7/site-packages/PyMuPDF-1.19.6-py3.7-macosx-10.13-x86_64.egg/fitz/_fitz.cpython-37m-darwin.so, 2): Symbol not found: ____chkstk_darwin
  Referenced from: /Users/mac/opt/anaconda3/lib/python3.7/site-packages/PyMuPDF-1.19.6-py3.7-macosx-10.13-x86_64.egg/fitz/_fitz.cpython-37m-darwin.so
  Expected in: /usr/lib/libSystem.B.dylib
 in /Users/mac/opt/anaconda3/lib/python3.7/site-packages/PyMuPDF-1.19.6-py3.7-macosx-10.13-x86_64.egg/fitz/_fitz.cpython-37m-darwin.so

一、问题分析

  1. 从报错信息中可知:加载_fitz.cpython-37m-darwin.so动态库时,出现Symbol not found: ____chkstk_darwin,即 ____chkstk_darwin符号找不到。我们在Mac终端用nm命令来查看_fitz.cpython-37m-darwin.so所有未定义的符号,命令如下:

我们可以发现在列出来的符号中包含____chkstk_darwin。
2. 其次,报错信息中还说____chkstk_darwin期望在libSystem.B.dylib中,我们继续在Mac终端中使用nm命令打印出libSystem.B.dylib中的符号,命令如下:

从打印的内容中可以发现并没有包含____chkstk_darwin。

二、结论

从以上分析可知,错误是由dlopen()加载_fitz.cpython-37m-darwin.so引起的,猜测可能是Mac系统在链接_fitz.cpython-37m-darwin.so时出现错误的缘故(我的Mac系统版本为:macOS High Sierra 10.13.6),当苹果系统高于10.13可能不会报错。

三、解决方案

fitz模块是PyMuPDF包的主要模块,既然fitz出现问题,那就使用较低版本的PyMuPDF,我使用的是1.18.1,同时降低pdf2docx的版本,我使用的是0.5.1版本。因为pdf2docx的版本高于0.5.1时需要opencv-python依赖库,而安装opencv-python时容易卡死以及其他问题。

PS:以下是Mac系统版本和相关包的版本

1.MacOS High Sierra: 10.13.6
2.pdf2docx: 0.5.1
3.PyMuPDF: 1.18.1
4.python: 3.7
5.pip升级到最新版本

举报
0 条评论