2016-05-27 4 views
0

ich habe folgendes Problem auf einem 64-Bit-Windows-Server:Fehler: „Nicht definierte Verweis auf“ - Kompilieren C-Erweiterung für Python Anaconda mit

Ich habe eine C-Datei, die eine Python-Erweiterung erklärt. Die C-Datei kompiliert auf eine .o-Datei, mit dem folgenden Befehl

gcc -c chr.c -IC:\Anaconda\include -o chr.o 

nun die .o-Datei erstellt wird, und alles ist gut. Aber wenn ich versuche, die .py-Datei zu erstellen, erhalte ich die folgende Fehlerantwort.

Was ich verstehe ist, dass ich in meinem c-Code die Funktionen "not_doublevector", "__impPy_InitModule4", "chr" und "pyvector_to_Carrayptrs" aufrufen.

gcc -shared chr.o -LC:\Anaconda\libs -lpython27 -o chr.py 

chr.o:chr.c:(.text+0x1a15): undefined reference to `not_doublevector' 
chr.o:chr.c:(.text+0x1a35): undefined reference to `not_doublevector' 
chr.o:chr.c:(.text+0x1a89): undefined reference to `pyvector_to_Carrayptrs' 
chr.o:chr.c:(.text+0x1a99): undefined reference to `pyvector_to_Carrayptrs' 
chr.o:chr.c:(.text+0x1aeb): undefined reference to `chr' 
chr.o:chr.c:(.text+0x1c3d): undefined reference to `__imp_Py_InitModule4' 
collect2.exe: error: ld returned 1 exit status 
+0

Haben Sie "offiziell" Anaconda installiert oder beziehen Sie sich nur auf die Bibliotheken. Es gibt eine sehr spezielle Installation und Optimierung von Bibliotheken für lineare Algebra, die im Rahmen einer Anaconda-Installation durchgeführt wird. Ich würde empfehlen, zuerst scipy zu installieren, wenn Sie dies noch nicht getan haben. –

+0

Ich würde auch empfehlen, den Fehler direkt in Ihre Frage einzufügen. –

+0

Hallo Joshua, scipy ist bereits installiert. Der Fehler bezieht sich auf Funktionen, die ich in meinem c-Code verwende. Sie sollten jedoch aus dem Python.h-Header erkannt werden, und deshalb verstehe ich nicht, warum es nicht funktioniert. Ich habe auch versucht, die Module direkt in Python zu importieren, und einen anderen Fehler in einer anderen Frage gepostet. – Ladi

Antwort

1

Ich konnte dieses Problem beheben. Das Problem war, dass die oben genannten Funktionen in meinen Header-Dateien nach vorne deklariert waren, aber der Hauptteil der Funktion in einer separaten Quelldatei deklariert war, die dieselben Header-Dateien verwendete. Ich kopierte den Funktionskörper in meine Quelldatei und alles funktionierte