Linux — Swig — C ++ для Python. ссылка systemd lib

Я использую Swig для создания оболочки Python для моего проекта C / C ++.

Мне удается все это скомпилировать, но когда я запускаю python и импортирую py-файл, я получаю

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

Я использую systemd lib
http://www.linuxfromscratch.org/lfs/view/systemd/chapter06/systemd.html

в моем файле h я включаю файл
#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, Extensionexample_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= был какой-то экспериментатор, чтобы добавить библиотеку. Не сработало

Это мое .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

Решение

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

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

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

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

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]