저는 실제로 Cython 프로그램에 기존 C 라이브러리를 연결하려고합니다.Cython 동적 라이브러리 링크
I는 다음과 같이 선언 된 모든 기능을 라이브러리의 엔트리 포인트 헤더 (.H)에 액세스 할 수 있습니다 ... 나는 __declspec(dllexport)
와 DLL을 만드는 데 사용되는 EXPORT_API
을 가정
EXPORT_API int _stdcall LibFunction();
을
또한 .lib 및 .dll 파일에 액세스 할 수 있습니다. 내 사이 썬 python setup.py build_ext
컴파일 할 때
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}
)
을 사용하고 그러나 :
나는 사이 썬의 일반적인 cdef extern from
으로이 기능을 사용하려고했습니다 해결되지 않은 외부 참조가 있습니다.
error LNK2001: unresolved external symbol __imp_LibFunction
other thread에서 찾을 수 있듯이 정적 또는 동적 라이브러리 링크의 문제 일 것 같습니다.
나는 setuptools 컴파일 옵션에서 온 것 같아서, distutils documentation과 Cython documentation을 사용하여 조사를 시도했다.
사실 나는 또한 내 자신의 C 라이브러리 (cfunc.lib, 정적 라이브러리)를 만들려고했는데 위에서 설명한 것과 같은 방식으로이 라이브러리에서 함수를 사용할 수있었습니다.
또한 DUMPBIN
을 MyLib.lib에 사용하고 있는데 심볼 int __cdecl LibFunction(void)
을 발견했으며 예상대로 __imp_
은 기호에 없습니다.
누군가가 무슨 일이 일어나고 있는지, 왜 계속되고 있는지 그리고 어떻게하면 내 문제를 해결할 수 있는지 정말 도움이 될 수 있습니다.