繁体   English   中英

SWIG Python包装程序在Mac OSX上崩溃

[英]SWIG Python wrappers crash on Mac OSX

我正在尝试为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)

我认为您应该链接到:

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

否则,来自共享库libpython3.4m.a某些符号可能会包含在您的共享库中,从python(?)导入时,它们会两次出现。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM