CPython:动态模块未定义模块导出函数错误

2023-12-09

我刚刚成功编译了 C++ 类的 Python 包装器。但是,当我尝试将模块加载到 Python 时(通过import cell):

ImportError: dynamic module does not define module export function (PyInit_cell)

我检查了系统在所有情况下都使用 Python3,因此这不是 Python 版本问题。
下面是我的setup.py file:

from distutils.core import setup, Extension
from Cython.Build import cythonize

setup(ext_modules = cythonize(Extension(
           "cell",                                
           sources=["cell.pyx", "cell.cc"],     
           language="c++",                       
           extra_compile_args=["-std=c++11"],
      )))

下面是生成的转储.so file:

0000000000201020 B __bss_start
0000000000201020 b completed.7594
                 w __cxa_finalize@@GLIBC_2.2.5
0000000000000530 t deregister_tm_clones
00000000000005c0 t __do_global_dtors_aux
0000000000200de8 t __do_global_dtors_aux_fini_array_entry
0000000000201018 d __dso_handle
0000000000200df8 d _DYNAMIC
0000000000201020 D _edata
0000000000201028 B _end
0000000000000630 T _fini
0000000000000600 t frame_dummy
0000000000200de0 t __frame_dummy_init_array_entry
0000000000000640 r __FRAME_END__
0000000000201000 d _GLOBAL_OFFSET_TABLE_
                 w __gmon_start__
00000000000004e8 T _init
                 w _ITM_deregisterTMCloneTable
                 w _ITM_registerTMCloneTable
0000000000200df0 d __JCR_END__
0000000000200df0 d __JCR_LIST__
                 w _Jv_RegisterClasses
0000000000000570 t register_tm_clones
0000000000201020 d __TMC_END__

我真的不明白为什么模块没有加载到python中,因为在构建过程中没有错误。

任何帮助,将不胜感激!


你不应该调用你的扩展/模块cell.pyx,以不同的方式称呼它 - 例如cycell.pyx.

为什么?构建扩展时执行以下步骤

  1. Cython 生成文件cell.cpp out of cell.pyx.
  2. 编译器编译cell.cpp到目标文件cell.o.
  3. 编译器编译cell.cc到目标文件cell.o并覆盖从中创建的目标文件cell.pyx.
  4. 链接器链接两者cell.o文件(但实际上只有一个) - 结果中没有任何内容定义cell.pyx/cell.cpp尤其PyInit_cell.

通过重命名 Cython 文件,可以避免目标文件被覆盖。

显然,另一个选择是重命名您的 c++ 文件。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CPython:动态模块未定义模块导出函数错误 的相关文章

随机推荐

  • PHP 写入文件

    下面是我用来将地图数组 翻译 为 SQL 代码的一些代码 以便在更新游戏地图时可以轻松更新数据库 正如您所看到的 它将 SQL 代码打印到屏幕上 以便我可以复制并粘贴它 随着我的地图变得更大 这将变得效率低下 因为它会因大量输出而使浏览器崩
  • Antlr4:输入不匹配

    这是一个简单的语法测试 我认为很容易解析 但我立即得到 不匹配的输入 并且我无法弄清楚 Antlr 正在寻找什么 输入 include something program TEST1 BLAH BLAH 我的语法 grammar ProgH
  • 从字符串转换日期和/或时间时转换失败

    我有这个查询 set IDENTITY INSERT dbo OtherData1 ON INSERT INTO OtherData1 OtherDataID EmployeeID OtherDate OType OSubject Stat
  • Sphinx 内联包括

    我想使用 include 函数内联 但只有当我用两行新行与前面的文本分开时 我才能让它实际包含我想要的文件 在有人问之前 我想包含的文件是一个协议号 所以不 它根本不会从新行中受益 我希望能够轻松更改它 以便我可以在文档的多个位置使用它 我
  • Perl 中的 yyyymmddhhmmss 到 YYYY-MM-DD hh:mm:ss?

    在 perl 中将 yyyymmddhhmmss 转换为 YYYY MM DD hh mm ss 并返回的最佳方法是什么 例如 20130218165601 到 2013 02 18 16 56 01 并返回 能https metacpan
  • 颜色树状图根据外部标签向根向上分支,直到标签匹配

    来自问题使用现有列的树状图的颜色分支 我可以为树状图叶子附近的分支着色 代码 x lt 1 100 dim x lt c 10 10 set seed 1 groups lt c red red red red blue blue blue
  • 如何填补自增字段的“洞”?

    我读过一些关于此的文章 但没有一篇涉及这个问题 我想这是不可能的 但我还是会问 我有一个包含 50 000 多个寄存器的表 这是一个旧表 其中发生了各种插入 删除操作 也就是说 大约 300 个寄存器中存在各种 漏洞 即 1340 1341
  • 打包java应用程序

    我有一个 java 应用程序 从中构建了一个依赖于许多第三方 jar 的 jar 打包该应用程序以供最终用户分发的最佳 常见方法是什么 最好的方法是使用像这样的构建工具Maven2或类似的东西 并使用它来管理您的依赖项并构建一个一体化的包
  • R 中 2 个 DTM 的余弦相似度

    我有 2 个文档术语矩阵 DTM 1 有 1000 个向量 1000 个文档 并且 DTM2 有 20 个向量 20 个文档 所以基本上我想将 DTM1 的每个文档与 DTM2 进行比较 并希望使用余弦函数查看哪些 DTM1 文档与哪些 D
  • C# - 不时检查文件是否存在并从中读取

    我创建一个 Windows 服务 它会不时检查某个文件是否存在 如果存在 然后从中读取数据 将数据发送到服务器并将文件移动到另一个文件夹 文件大小约为 1 3 Mb 我想我会用System Threading Timer此处检查文件是否存在
  • 字符串中第一个数字用“*”分隔字符串

    我认为这是一个简单的问题 但我看不出我错过了什么 我想在第一个数字处分割字符串 在字符串中存在非字母数字符号之前效果很好 帮助 Works pet lt c Dog 100 Cat 340 df lt as data frame pet d
  • 在C++中使用线程交替打印奇数和偶数

    使用线程打印奇偶数我遇到了这个问题并想讨论 C 中的解决方案 我能想到使用2个二进制信号量奇数和偶数信号量 偶数信号量初始化为 1 奇数信号量初始化为 0 T1 thread function funOdd wait even print
  • MySQL默认时间格式UTC还是GMT?

    嗨 我对 UTC 和 GMT 很困惑 我在 MySQL 表中插入前列 event date 例如 2010 07 01 23 50 00 日期时间 我的客户在前端询问选项为 GMT 1 GMT 2 GMT 1 GMT 2 等等 如果我选择任
  • 如何在 Mediawiki 中检查用户是否是使用 Php 的 Sysop?

    我正在尝试向侧边栏添加一个 div 并且我只希望此块向管理员显示 php 如何检查用户是否是管理员 我正在尝试将其添加到 myskin php 文件中 但不知道该怎么做 我一直在使用类似的东西来检查用户是否登录 有没有类似的东西来检查该用户
  • React-Router v6 未在生产环境中渲染

    我在这个问题上已经失去了智慧 希望有任何想法可以让我走上正轨 我已经实现了一个 React js SPA 它使用react router domv6 来浏览应用程序功能 该应用程序在我的本地主机上完美运行 当部署到生产中时
  • 为什么 gcc 会生成没有标志 -fno-pie 的奇怪代码?

    我正在尝试使用标志 fno pie 和不使用标志 fno pie 在 gcc 中编译虚拟函数 void dummy test entrypoint 当我在没有标志的情况下编译时 gcc m32 ffreestanding c test c
  • 如何使用 PyObject_IsInstance 和非内置类作为第二个参数?

    在 C C 中 我想看看是否PyObject是一个实例 不幸的是 PyInstance Check宏不适用于新式类 所以 根据我读到的论坛帖子 PyObject IsInstance可以解决问题 然而 我发现的所有示例都演示了与内置类型 如
  • 2 个列表按元素相加?

    我现在有了 list1 1 2 3 list2 4 5 6 我希望拥有 1 2 3 4 5 6 5 7 9 只是两个列表的按元素相加 我当然可以迭代这两个列表 但我不想这样做 What is 最Pythonic的方式这样做 Use map
  • 使用 OKHttp 创建正确的 MultipartBuilder Http 请求

    我喜欢重新编码我的项目并使用 okHttp 而不是 Android 中实现的默认 HttpClient 我已经下载了 okhttp main 版本的最新源代码 现在我找到了一些如何创建和构建 POST 请求的示例 现在是我的问题 我想创建一
  • CPython:动态模块未定义模块导出函数错误

    我刚刚成功编译了 C 类的 Python 包装器 但是 当我尝试将模块加载到 Python 时 通过import cell ImportError dynamic module does not define module export f