2017-02-07 23 views
0

Я использую swig для создания оболочки python для моего проекта c/C++.swig - C++ to 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 для systemd lib не включен автоматически с swig, потому что это не в папке lib по умолчанию. он находится на /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= был некоторый experminet добавить LIB. Не работает.

Это мой .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 использует функцию от systemd/sd-bus

+0

Почему вы написали '-o/Библиотека/x86_64-Linux-гну/libsystemd.so' как дополнительный аргумент? '-o' для вывода, вы, вероятно, хотите, чтобы -l и/lib/x86_64-linux-gnu должны находиться на пути библиотеки по умолчанию. Я думаю, что есть правильный способ заставить distutils связываться с зависимостями. – Flexo

ответ

0

Решение этой его использовать аргументы

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

добавить их в качестве аргументов в setup.py файл при создании Extension

надеюсь, что это поможет любому, кто в ней нуждается.