我正在尝试将用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();
感谢任何可以提供帮助的人。