私はCの関数のためのシンプルなSWIG Pythonラッパーを作成しようとしていますが、私はこの種のエラーは、異なるバージョンを使用することによって引き起こされることを読んSWIGのPythonラッパーは、Mac OSX上でクラッシュ
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"
はちょうど私がすべて同じ結果で、(MacPortsのから)clang
とgcc-mp-4.9
を試してみました代わりに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"
Linki NGは以下の通りである。
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は静的にリンクされているので、シンボルは重複しています。 Linuxのpythonと私の共有オブジェクトは動的にリンクされています。 –