Python CFFI-Fehler LNK2001: unresolved external symbol PyInit__... beheben
Problem:
Beim Versuch, die Python-Bibliothek mit einem C-Modul auf Windows zu installieren, erscheint eine Fehlermeldung wie
error.txt
LINK : error LNK2001: unresolved external symbol PyInit__cv_algorithms
build\temp.win-amd64-3.6\Release\src_cv_algorithms.cp36-win_amd64.lib : fatal error LNK1120: 1 unresolved externals
error: command 'C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\x86_amd64\link.exe' failed with exit status 1120Lösung
Auf Windows generiert CFFI diese nicht ordnungsgemäß.
Dies kann einfach behoben werden, indem eine Template-Funktion hinzugefügt und diese nur auf Windows eingebunden wird: Ich empfehle, windows.cpp wie folgt zu erstellen:
windows.cpp
/**
* This contains hacks to get the installation on Windows working.
* This fixes error LNK2001: unresolved external symbol PyInit__cv_algorithms
*/
void PyInit__cv_algorithms(void) { }Den Namen der Funktion aus der Fehlermeldung kopieren und einfügen! Der Fix funktioniert nicht, wenn der falsche Funktionsname verwendet wird.
Beispiel, wie diese Datei nur auf Windows eingebunden wird:
setup.py
platform_src = ["src/windows.cpp"] if os.name == 'nt' else []
mod_cv_algorithms = Extension('cv_algorithms._cv_algorithms',
sources=['src/main.cpp'] + platform_src)Ein vollständiges Beispiel findet sich unter cv_algorithms, wo ich diesen Fix zuerst implementiert habe.
Check out similar posts by category:
Python
If this post helped you, please consider buying me a coffee or donating via PayPal to support research & publishing of new posts on TechOverflow