Python Cython动态库链接
实际上,我正在尝试将现有的C库链接到我的Cython程序 我可以访问库的入口点标题(.h),所有函数声明为:Python Cython动态库链接,python,dll,cython,Python,Dll,Cython,实际上,我正在尝试将现有的C库链接到我的Cython程序 我可以访问库的入口点标题(.h),所有函数声明为: EXPORT_API int _stdcall LibFunction(); 我假设EXPORT\u API用于创建带有\u declspec(dllexport)的dll 我还可以访问.lib和.dll文件 我已尝试将此函数与Cython的中常见的cdef extern一起使用: cdef extern from "include\\entrypoint.h": int Li
EXPORT_API int _stdcall LibFunction();
我假设EXPORT\u API
用于创建带有\u declspec(dllexport)
的dll
我还可以访问.lib和.dll文件
我已尝试将此函数与Cython的中常见的cdef extern一起使用:
cdef extern from "include\\entrypoint.h":
int LibFunction()
def c_LibFunction():
LibFunction()
我正在使用下面的setup.py
from setuptools import setup, Extension
from Cython.Distutils import build_ext
NAME = 'testlib'
REQUIRES = ['cython']
SRC_DIR = 'testlib'
PACKAGES = [SRC_DIR]
INCLUDE_DIR = 'testlib\include'
LIB_DIR = 'testlib\lib'
ext = Extension(SRC_DIR + '.wrapped',
[SRC_DIR + '/wrapped.pyx'],
include_dirs=[INCLUDE_DIR],
library_dirs = [LIB_DIR],
libraries=['cfunc', 'MyLib']
)
if __name__ == "__main__":
setup(
install_requires=REQUIRES,
packages=PACKAGES,
name=NAME,
ext_modules=[ext],
cmdclass={"build_ext": build_ext}
)
但是当我编译Cythonpython setup.py build\u ext时,我得到一个未解析的外部引用:
错误LNK2001:未解析的外部符号\uuuu imp\u LibFunction
正如我在上所发现的,静态或动态库链接的问题似乎也是如此
我认为它来自setuptools编译选项,我试图研究使用distutils和Cython
问题是,我还尝试创建自己的C库(cfunc.lib,一个静态库),并以与上面所述相同的方式使用函数
我还在MyLib.lib上使用了DUMPBIN
,并找到了符号int\uu cdecl LibFunction(void)
,正如预期的那样,\uu imp\uu
不在符号中
如果有人知道发生了什么,为什么会发生,以及我如何解决我的问题,那将非常有帮助 我终于找到了解决方案,所以如果将来有人需要帮助,我会发布它
我在Windows上使用Visual Studio编译代码
<> >即使我创建了 Cfcc我的代码>入口点.h <代码>只包含C样式函数声明,但DLL被编译为C++项目,这就是为什么它不能工作,名字的名称是坏的。
所以我只是在我的setup.py