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