Сбой библиотеки импорта Python с динамическим модулем не определяет функцию инициализации - PullRequest
0 голосов
/ 22 февраля 2019

У меня есть очень простой пример .c:

double My_variable = 3.0;

И example_python.i:

%module example
%{
extern double My_variable;
%}

Затем я запускаю:

swig -python example_python.i
gcc -o example.o -c -fPIC example.c
gcc -o example_python.o -c -I/usr/include/python2.7 -fPIC example_python_wrap.c
gcc -o libpython_lib.so -shared example.o example_python.os

Хорошо, я запускаю python:

>>> import libpython_lib
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: dynamic module does not define init function (initlibpython_lib)
>>>

Так я что-то здесь упустил?Как исправить эту проблему?Я использую SWIG версии 3.0.12 и Ubuntu GCC версии 7.3.0.

Большое спасибо.

1 Ответ

0 голосов
/ 24 февраля 2019

В вашем файле example_python.i вам нужно, чтобы имя модуля совпадало с именем модуля импорта.

Swig сгенерирует функцию init из имени модуля.Таким образом, вы сможете исправить, изменив example_python.i на:

%module libpython_lib
%{
extern double My_variable;
%}

Так что, когда вы импортируете libpython_lib, он найдет модуль.Также вы можете изменить библиотеку импорта и общего доступа на имя «пример» в качестве альтернативного решения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...