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