导入 .py 文件,该文件通过 ctypes 导入 .so 文件 - 错误“动态模块未定义模块导出函数”

问题描述 投票:0回答:1

我在Linux下工作。

  1. 我写了一个文件
    a.cpp
    (其中有一个函数
    f
    ,我在文件顶部做了一个
    extern "c" {}
    声明)。
  2. 我编译了
    g++ -shared -fPIC -o a.so a.cpp
  3. 我在有
    a.py
    的地方写了
    ctypes.cdll.LoadLibrary('./a.so')
    。如果我实际运行这个文件,那么一切都很好,我可以调用该函数
    f
  4. 我写了
    b.py
    ,里面有
    import a
    。我在该导入行收到错误:
    dynamic module does not define module export function (PyInit_a)

我想我需要用一些

__init__
或其他东西来修改导入,但也许还有其他东西。有人知道该怎么办吗?

谢谢!

c++ python-3.x linux shared-libraries ctypes
1个回答
0
投票

虽然我不明白为什么,但对我有用的是创建一个子目录

a
,将文件
a.py
a.so
以及一个空的
__init__.py
文件放在那里,用
ctypes.cdll.LoadLibrary('./a.so')
替换上面的
ctypes.cdll.LoadLibrary('./a/a.so')
,并将上面的
import a
替换为
from a import a
。然后就可以了。

© www.soinside.com 2019 - 2024. All rights reserved.