我实际上正试图将现有的C库链接到我的Cython程序。Cython动态链接库
我访问声明为所有函数库的入口点头(.h):
EXPORT_API int _stdcall LibFunction();
我想用来创建__declspec(dllexport)
该DLL EXPORT_API
...
我也有权访问.lib和.dll文件。
我试图使用该功能用Cython通常的cdef extern from
:
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}
)
但是,当我编译我用Cython python setup.py build_ext
我得到一个无法解析的外部参考:
error LNK2001: unresolved external symbol __imp_LibFunction
正如我在other thread上找到的,它似乎是一个静态或动态库链接的问题。
我认为它来自setuptools编译选项,我试图调查使用distutils documentation和Cython documentation。
的事情是,我也试图做我自己的C库(cfunc.lib,静态的),我成功地使用功能它,我与上述相同的方法。
我也MYLIB.LIB使用DUMPBIN
,我发现了个符号int __cdecl LibFunction(void)
和预期,__imp_
不在符号。
它有人发生了什么事情,为什么它是怎么回事,我怎么能解决我的问题,也可能是非常有帮助的想法!