2017-02-07 1 views
0

나는 나의 c/C++ 프로젝트를위한 파이썬 래퍼를 만들기 위해 swig를 사용하고있다.swig - C++에서 python으로. link systemd lib

나는 모든 컴파일을 관리하지만, 파이썬을 실행하고 평 파일을 가져올 때 나는

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

내가 내 시간 파일에 systemd lib에 http://www.linuxfromscratch.org/lfs/view/systemd/chapter06/systemd.html

을 사용하고 얻을 내가 파일을 포함 #include <systemd/sd-bus.h>

에 대한 .so 파일은 포함되지 않는다고 생각합니다. 기본 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

누구든 도움이되기를 바랍니다.

관련 문제