将我使用swig

时间:2019-09-21 02:49:24

标签: python c swig

我正在尝试将用C语言编写的2个函数的库导入到python中的代码中(使用swig)。

我有以下文件:OldSystem.h OldSystem.c OldSystem.i

我在.i格式文件中声明的头文件中有2个函数:

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.so *.o

现在,我拥有在python中使用C函数所需的所有文件。

问题是,当我尝试将此库导入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();

感谢任何可以提供帮助的人。

0 个答案:

没有答案