Cython on Termux. ImportError: dynamic module does not define module export function (PyInit_libmc)
Cython on Termux. ImportError: dynamic module does not define module export function (PyInit_libmc)
我正在尝试在 Termux 中对 Android 使用 python/cython。我安装了 python、cython pip - 没有 'obvious' 问题。现在我有两个简单的测试片段
一个'main'文件mct.py
import os
hm=os.path.expanduser('~')
os.chdir(hm+'/projects/python1/v1')
from libmc import sq
print(sq(4))
和一个愚蠢而琐碎的 cython 'library'
cpdef double sq(double x):
return x*x
我以简单的方式编译了库(没有 distutils fuzz),即我这样做
cython -3 mct.pyx
clang -shared -pthread -fpic -fwrapv -fno-strict-aliasing -O2 -Wall -I /data/data/com.termux/files/usr/include/python3.7m/ -o libmc.so -lpython3 mc.c
有了它,我在我的项目根目录中得到了一个 libmc.so。然而,当我尝试
python mct.py
我明白了
Traceback (most recent call last):
File "mct.py", line 4, in <module>
from libmc import sq
ImportError: dynamic module does not define module export function (PyInit_libmc)
现在我卡住了。我在这里错过了什么?有什么解决这个问题的建议吗?
马克
PS.: 澄清一下,'normal' Python 在 Android-box 上对我来说似乎很有效。
pyx 的名称需要为 libmc
。 Cython 将根据文件名生成一个 init 函数,该文件名当前与 .so 文件实际调用的内容不匹配(当 Python 导入已编译的模块时,它会根据 .so 文件名查找 init 函数)。
我正在尝试在 Termux 中对 Android 使用 python/cython。我安装了 python、cython pip - 没有 'obvious' 问题。现在我有两个简单的测试片段
一个'main'文件mct.py
import os
hm=os.path.expanduser('~')
os.chdir(hm+'/projects/python1/v1')
from libmc import sq
print(sq(4))
和一个愚蠢而琐碎的 cython 'library'
cpdef double sq(double x):
return x*x
我以简单的方式编译了库(没有 distutils fuzz),即我这样做
cython -3 mct.pyx
clang -shared -pthread -fpic -fwrapv -fno-strict-aliasing -O2 -Wall -I /data/data/com.termux/files/usr/include/python3.7m/ -o libmc.so -lpython3 mc.c
有了它,我在我的项目根目录中得到了一个 libmc.so。然而,当我尝试
python mct.py
我明白了
Traceback (most recent call last):
File "mct.py", line 4, in <module>
from libmc import sq
ImportError: dynamic module does not define module export function (PyInit_libmc)
现在我卡住了。我在这里错过了什么?有什么解决这个问题的建议吗?
马克
PS.: 澄清一下,'normal' Python 在 Android-box 上对我来说似乎很有效。
pyx 的名称需要为 libmc
。 Cython 将根据文件名生成一个 init 函数,该文件名当前与 .so 文件实际调用的内容不匹配(当 Python 导入已编译的模块时,它会根据 .so 文件名查找 init 函数)。