python - 如何在 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']
)
有任何想法吗?
解决方案
推荐阅读
- spring - Using Tomcat in Production for Spring Boot apps
- aframe - Aframe:动画不适用于 mixamo 的 collada 模型
- python-3.x - 法语笔记本的一部分
- sql - 在 Google 表格查询中使用 TRIM
- html - runat="server" 和 vb.net 页面上的多种形式
- javascript - 在 foreach 循环中获取多个链接
- javascript - 在 ReactJS 中从组件状态传递样式
- terraform - 将两个现有的 Terraform 状态组合为模块
- c# - 检测玩家是否降落在带有刚体的盒子上
- javascript - D3/Angular 获取窗口大小