【问题标题】:SWIG Python wrappers crash on Mac OSXSWIG Python 包装器在 Mac OSX 上崩溃
【发布时间】:2016-09-01 20:53:38
【问题描述】:

我正在尝试为 C 函数创建一个简单的 SWIG Python 包装器,但它总是崩溃

Fatal Python error: PyThreadState_Get: no current thread

我读到这种错误是由在构建/链接和运行时使用不同版本的python 引起的,但据我所知,这里不是这种情况。

我下载、构建并安装了一个全新的 python 3.4.4。我已验证我使用的文件是新文件。 我愿意:

swig -python -o example_wrap.c -I. -I/usr/local/include/python3.4m example.i 
cc -fPIC -I. -I/usr/local/include/python3.4m -c example.c
cc -fPIC -I. -I/usr/local/include/python3.4m -c example_wrap.c
cc -shared -o _example.so example.o example_wrap.o /usr/local/lib/libpython3.4m.a
/usr/local/bin/python3.4 -c "import example"

为了确定,我尝试了 clanggcc-mp-4.9(来自 MacPorts)而不是 cc,结果都一样。

Fatal Python error: PyThreadState_Get: no current thread

这在 Linux 上运行良好。我不相信我正在链接任何框架(但 python3.4 确实如此)。 我在这里错过了什么?

代码如下:

example.h

#ifndef HELLO_H
#define HELLO_H
extern void hello();
#endif

example.c

#include <stdio.h>
void hello() {
   printf("Hello\n");
}

example.i

%module example
%{
#include "example.h"
%}
%include "example.h"

链接如下:

otool -L /usr/local/bin/python3.4
/usr/local/bin/python3.4:
    /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 1258.1.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1226.10.1)

otool -L _example.so 
_example.so:
    _example.so (compatibility version 0.0.0, current version 0.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1226.10.1)

【问题讨论】:

    标签: python c macos swig


    【解决方案1】:

    我认为你应该链接到:

    cc -shared -o _example.so example.o example_wrap.o -L/usr/local/lib -lpython3.4m
    

    否则,libpython3.4m.a 中的某些符号可能会包含在您的共享对象中,然后在从 python (?) 导入时可用两次。

    无论如何,在我的系统(OSX 10.11,MacPorts Python 3.4)上,两者都可以工作。

    【讨论】:

    • 我认为你是对的。我的 python 是静态链接的,因此符号确实会重复。在linux上python和我的共享对象是动态链接的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    相关资源
    最近更新 更多