2017-02-07 8 views
0

私はswigを使って私のc/C++プロジェクトのpythonラッパーを作っています。swig - C++をpythonに変換するlink systemd lib

私はファイルが含まれ、私はそれをすべてをコンパイルするために管理しますが、私は

ImportError: ./_example.so: undefined symbol:sd_bus_get_property_trivial

を取得するのpythonを実行し、PYファイルをインポートするときに、私はsystemdにlibに私の時間のファイルで http://www.linuxfromscratch.org/lfs/view/systemd/chapter06/systemd.html

を使用しています #include <systemd/sd-bus.h>

systemdのファイルは含まれていないと思いますそれはデフォルトのlibフォルダにないので、swigで自動的に。それはで/lib/x86_64-linux-gnu/libsystemd.so

この.soファイルを手動で含めるにはどうすればよいですか?これは私のsetup.pyです:

#!/usr/bin/env python 

""" 
setup.py file for SWIG simple_ex 
""" 

from distutils.core import setup, Extension 


example_module = Extension('_example', 
          sources=['example_wrap.cxx', 'example.cpp'], 
          extra_compile_args=["-o /lib/x86_64-linux-gnu/libsystemd.so"] 
          ) 

setup (name = '_example', 
     version = '0.1', 
     author  = "SWIG Docs", 
     ext_modules = [example_module], 
     py_modules = ["_example"], 
     ) 

extra_compiled_args=のlibを追加するためのいくつかのexperminetました。うまくいきませんでした。

これは私の.iファイルです:

/* File: example.i */ 
%module example 

%include std_vector.i 
%include std_string.i 
%include exception.i 


%{ 
#define SWIG_FILE_WITH_INIT 
#include "example.h" 
%} 

%exception { 
    try { 
     $action 
    } catch(...) { 
     SWIG_exception(SWIG_RuntimeError, "Unknown exception"); 
    } 
} 

int foo(int a); 

fooはそれが

runtime_library_dirs=["/lib/x86_64-linux-gnu/"], 
libraries=["systemd"] 

setup.pyに引数として追加の引数を使用するには、このにsystemd/sd-bus

+0

余分な引数として '-o/lib/x86_64-linux-gnu/libsystemd.so'と書かれたのはなぜですか? '-o'は出力のために、おそらく-lと/ lib/x86_64-linux-gnuがデフォルトのライブラリパス上にあるべきです。私はdistutilsに依存関係をリンクさせる適切な方法があると思う。 – Flexo

答えて

0

ソリューションから関数を使用していますファイルを作成中にExtension

これは誰でも必要とする人に役立ちます。

関連する問題