2017-11-24 18 views
0

私はCythonを使用してCライブラリのラッパーを作成しようとしています。Cython:すべてのCの依存関係をコンパイル

私のCルーチンを使用する単純なpyxファイルを作成しました。

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) 

sel.cファイルは、ファイルの数百を持っているsrcディレクトリにあるCライブラリをインポートします。

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

これらの初期ヘッダファイルには、他にもたくさんのインクルードが含まれています。

Symbol not found: _type_attribute
Expected in: flat namespace

type_attribute機能がsrc/clib/finder.hファイル内にインポートされます:

たび

は、私はエラーを取得していますコンパイルされたライブラリを実行しようとしています。

Cライブラリのすべての依存関係を自動的に見つけてコンパイルするにはどうすればよいですか?

マイセットアップの設定は次のようになります。

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

        )]) 

私は設定ですべてのCファイルを一覧表示しようとしましたが、このライブラリは、プラットフォーム固有のファイルをたくさん持っているので、それは動作しません。

+2

はあなたではなくて、それをコンパイルしようとするよりも、とリンク独自のメイクファイルと別のライブラリとして、あなたのCライブラリを処理する方が良いだろうマングルC++の名前を持っていた示す記号で_

ましたあなたのPython拡張? – DavidW

答えて

1

が、これはCではなくC++として、それが含まれます

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

を試してみてください。景品は、ここでそれが

関連する問題