2017-01-11 4 views
1

私は、次のcppとhファイルで構成されるC++ライブラリを持っています。私は、cortex.cppの関数をPython(3.5)に公開したいと考えています。PythonへのSwig C++:.cppと.hファイルをまとめてコンパイルする

cortex.h 
cortex_socket.h 
cortex_intern.h 
m3x3.h 
cortex_unpack.h 

m3x3.cpp 
cortex_unpack.cpp 
cortex.cpp 
cortex_socket.cpp 

私は、次のcortex.iファイルがぶ飲み作成:

swig -python -Isrc cortex.i 
g++ -Isrc -fPIC -I/usr/include/python3.5 -c cortex.cpp cortex_wrap.c 
g++ -shared -fPIC -o _cortex.so cortex.o cortex_wrap.o 

これらのコマンドはエラーを返しません。

%module cortex 
%{ 
#include "cortex.h" 
#include "m3x3.h" 
#include "cortex_intern.h" 
#include "cortex_socket.h" 
#include "cortex_unpack.h" 
#include "stdbool.h" 
%} 

%include "cortex.h" 

次へ]を、私はモジュールをコンパイルするには、次のように使用します。 pythonで結果モジュールを使用しようとしたときただし、エラーがポップアップ表示されます:

>>> import cortex 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "cortex.py", line 28, in <module> 
    _cortex = swig_import_helper() 
    File "cortex.py", line 24, in swig_import_helper 
    _mod = imp.load_module('_cortex', fp, pathname, description) 
ImportError: ./_cortex.so: undefined symbol: _Z13GetHostByAddrPhPc 
>>> 

私は、このエラーに関連するこのフォーラムで他のいくつかの質問/回答を発見しました。しかし、swig anc C++に精通していないので、これらを自分の状況、コード、コマンドに変換することは難しいです。言い換えれば、これらの他の投稿を読んだ後でも、私はまだ失われています。

私は、上記のコードスニペットをウェブ上のさまざまなソースから収集しました。したがって、私がこれらのコード行が何をしているのか説明してくれれば感謝しています(解決策を見つけるのに役立つかもしれません)。

いずれにしても、いくつかの助けが素晴らしいでしょう。

+0

OK、悪いです。編集:いくつかの末尾の単語を削除しました。 – DonDavey

+0

おそらく共有ライブラリを別のものとリンクする必要があります。 – Flexo

+0

私は分かりません。 GetHostByAddrは、私のライブラリ内のヘッダファイルの1つで定義されています。これはcortex_socketファイルにあります。 – DonDavey

答えて

0

C++コードをラップするときは、SWIGを `-C++ 'オプションで呼び出すことが重要です。

関連する問題