Импорт в мою библиотеку кода Python, которую я сделал с помощью Swig - PullRequest
0 голосов
/ 21 сентября 2019

Я пытаюсь импортировать библиотеку из 2 функций, которые я написал на C, в свой код на python (используя swig).

У меня есть следующие файлы: OldSystem.h OldSystem.c OldSystem.i

У меня есть 2 функции в заголовочном файле, которые я объявил в файле формата .i:

OldSystem.i:


%module OldSystem

%{

'#include "OldSystem.h"

%}

char* readOldParty(char *party_data_file);

void freeOldParty();

Теперь я хочу использовать эти функции в своем коде Python.

Я пытаюсь использовать Swig, поэтому я создал файл обтекания и объектные файлы .o, с помощью этой команды: swig -python OldSystem.i

, затем я набрал: gcc -c -std = c99 -Wall -Werror -pedantic-errors -DNDEBUG -fPIC -I / usr / local / include / python3.6m * .c

и после этого: ld -shared -L / usr / local / include / python3.6m -o _OldSystem.так что * .o

теперь у меня есть все необходимые файлы для использования моих функций C в python.

проблема заключается в том, что когда я пытаюсь импортировать эту библиотеку в командную строку python (с "import"OldSystem ") я получаю следующее сообщение об ошибке:

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

  File "OldSystem.py", line 26, in <module>

'    _OldSystem = swig_import_helper()

  File "OldSystem.py", line 22, in swig_import_helper

 '   _mod = imp.load_module('_OldSystem', fp, pathname, description)

ImportError: ./_OldSystem.so: undefined symbol: PyUnicode_FromFormat

Кто-нибудь знает, в чем проблема или где мне искать?если понадобится какая-либо другая информация о моем коде C, чтобы понять, я добавлю в комментариях, но в основном объявления описаны выше (в файле OldSystem.i):

char * readOldParty (char * party_data_file);

void freeOldParty ();

Спасибо всем, кто может помочь.

...