如何在Cython32位中使用32位静态库中的符号

问题描述

我正在尝试使用Cython将函数从静态库公开给python。我有一个myLibrary.lib一个myLibrary.dll文件,但没有头文件。库中有一个名为myFunc函数/符号。

所以我写了我的core.pxd文件

cdef extern short myFunc(char*,short*,int*,float*,short*)

还有我的core.pyx文件

import numpy as np
cimport numpy as np

def get_data(char[:] path,int istart,int iend):
    cdef short err = 0
    cdef int[:] pts = np.arange(istart,iend,dtype=np.int32)
    cdef short nPts = <short>pts.shape[0]
    cdef float[:,:,:] out = np.zeros((nPts,11,18),dtype='f4')

    myFunc(&path[0],&nPts,&pts[0],&out[0,0],&err)

    return np.asarray(out)

我最终将使用哪个版本:

from setuptools import setup,Extension
from Cython.Build import cythonize
import numpy


setup(
    ext_modules = cythonize([
        Extension('mymodule.core',['mymodule/core.pyx'],include_dirs=[numpy.get_include()],libraries=['myLibrary'],library_dirs=['mymodule'],)
    ])
)

然后我使用以下哪个:

python setup.py build_ext --inplace

但是,它给了我错误

core.obj : error LNK2001: unresolved external symbol _myFunc

似乎正在搜索符号_myFunc而不是myFunc。如何防止Cython搜索下划线前缀的符号,而仅使用我指定的符号?

我正在使用32位python 3.6,该库是32位的,并且我已经安装了numpy和Cython的32位版本。库文件(dll和lib)与core.pyx文件位于同一目录中。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)