首页 > 解决方案 > 导入我使用 swig 制作的 python 代码 ac 库

问题描述

我正在尝试将我在 C 中编写的 2 个函数的库导入我在 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.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();

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

标签: pythoncswig

解决方案


推荐阅读