首页 > 解决方案 > 如何在 MacOS 中使用 Accelerate.h 构建 Python 模块?

问题描述

我曾经有一个用 C++ 构建的自制 Python 模块,通过 setup.py 脚本编译和安装。它曾经工作得很好,但是在更新到 Python 3.8(从 3.7 开始)之后,我需要重新安装它。

为此,我认为我只需要通过相同的 setup.py 文件进行重建,它就会再次工作。

虽然它编译正确,但在 Python 中导入模块时,我收到以下错误消息:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: dlopen(/usr/local/lib/python3.8/site-packages/cvmodule.cpython-38-darwin.so, 2): Symbol not found: _dgesv_
  Referenced from: /usr/local/lib/python3.8/site-packages/cvmodule.cpython-38-darwin.so
  Expected in: flat namespace
 in /usr/local/lib/python3.8/site-packages/cvmodule.cpython-38-darwin.so

问题似乎出在 Accelerate.h 中 Apple 自己的 LAPACK 上。我的模块使用这个库的 dgesv_ 函数。

万一有人想知道,除了 Python.h 之外,我的模块不包含系统中不包含的任何库或头文件。我的 setup.py 中的扩展看起来就像:

cvmodule_module = Extension(
    name='cvmodule',
    sources=['cvmodule.cpp']
)

有任何想法吗?

标签: pythonc++distutilscpython

解决方案


推荐阅读