j'ai compilé un module C appelé edlib pour la distance d'édition, puis je l'ai inclus dans mon projet,erreur reliant la compilation d'un code cython appelant bibliothèque extern
setup.py
structureS.pyx
cedlib.pxd
cedlib
|_____include
|______edlib.h
|_____lib
|______edlib.lib
mais après l'exécution python setup build_ext --inplace
j'ai relier erreur, ici est le code,
#file:setup.py
from distutils.core import setup
from distutils.extension import Extension
from Cython.Build import cythonize
ext_modules = [
Extension(
"structureS",
["structureS.pyx"],
extra_compile_args=['/openmp'],
extra_link_args=['/openmp'],
include_dirs = ['edlib/include'],
#libraries = ['edlib'],
library_dirs = ['edlib/lib'],
# sources = ['edlib/src/edlibe.cpp']
)
]
setup(
name='structureS',
ext_modules=cythonize(ext_modules),
)
le fichier PXD a été donnée par l'auteur du module dans ce lien cedlib.pxd
#structureS.pyx
from cedlib cimport EdlibAlignResult, edlibAlign, edlibDefaultAlignConfig,edlibFreeAlignResult
cdef char* query = "ACCTCTG"
cdef char* target = "ACTCTGAAA"
cdef EdlibAlignResult result = edlibAlign(query, 7, target, 9, edlibDefaultAlignConfig())
if (result.status == 0): #EDLIB_STATUS_OK
printf("%d", result.editDistance)
edlibFreeAlignResult(result)
ici est le message d'erreur:
structureS.obj: erreur LNK2001: non symbole externe edlibFreeAlignResult Résolu
structureS.obj: erreur LNK2001: non symbole externe edlibAlign Résolu
structureS.obj : erreur LNK2001: non symbole externe edlibDefaultAlignConfig Résolu
Note: mon projet est compilé pour la plate-forme 64 bits, et le module est configuré pour la plate-forme 32 bits, j'ai essayé de compiler le module pour 64bit avec Visual Studio 2017 sans succès,
Pourquoi avez-vous commenté 'libraries = ['edlib'],' line? –
car avant d'avoir copié le fichier d'en-tête et le fichier de bibliothèque dans le dossier du compilateur j'ai donc utilisé 'libraries = ['edlib']', mais avec les erreurs de liaison, j'ai copié les fichiers dans un dossier nommé edlib la question ci-dessus, et j'ai commenté la ligne que vous avez mentionné, je pense que c'est la même chose dans les deux cas, de sorte que le problème ne vient pas de cette –