2017-11-24 6 views
0

Ich versuche, einen Wrapper für eine C-Bibliothek mit Cython zu schreiben.Cython: Kompilieren Sie alle C Abhängigkeiten

Ich habe eine einfache Pyx-Datei erstellt, die meine C-Routine verwendet.

cdef extern from "sel.h": 
    void parse_file(const char *file) 


cpdef void main(str file): 
    file_pybyte = file.encode('UTF-8') 
    cdef char*c_file = file_pybyte 

    parse_file(c_file) 

Die sel.c Datei importiert eine C-Bibliothek befindet sich in src Verzeichnis, das Hunderte von Dateien hat.

// sel.c 
#include "src/clib/finder.h" 
#include "src/clib/core/core.h" 
#include "src/clib/encoding/encoding.h" 

Diese ersten Header-Dateien haben eine Menge anderer enthält in ihnen.

Jedesmal, wenn ich versuche, eine kompilierte Bibliothek laufen Ich erhalte eine Fehlermeldung: ist

Symbol not found: _type_attribute
Expected in: flat namespace

Die type_attribute Funktion innerhalb src/clib/finder.h Datei importiert.

Wie kann ich automatisch alle Abhängigkeiten von einer C-Bibliothek finden und kompilieren?

Mein Setup Config sieht wie folgt aus:

cythonize([Extension("*", 
        ["lib/*.pyx", 
         "lib/sel.c", 
         ], 
        include_dirs=[ 
         'lib/src/clib/', 
         'lib/src/clib/include', ], 

        )]) 

Ich habe versucht, alle C-Dateien in einer Config-Liste, aber es funktioniert nicht, da diese Bibliothek eine Menge plattformspezifische Dateien.

+2

Würden Sie besser Ihre C-Bibliothek als eine separate Bibliothek mit eigener Make-Datei behandeln, die Sie gegen verknüpfen, anstatt zu versuchen, es zu kompilieren mit deine Python-Erweiterung? – DavidW

Antwort

1

versuchen

extern "C" { 
    #include "src/clib/finder.h" 
} 

dies wird es als C anstelle von C++ enthalten.

das Werbegeschenk hier war die _ in dem Symbol angibt, dass es C++ Namen hatte Mangeln

Verwandte Themen