SWIG and Pythonのチュートリアルに従っていますが、Pythonでコンパイルした拡張機能をインポートしようとするとエラーが発生します。SWIGシンボルが見つかりません。シンボル名の先頭にアンダースコアが付きます
Python 3.5.2 (default, Oct 11 2016, 15:01:25)
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.38)] on darwin
>>> import _example
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: dlopen(/pat/to/_example.cpython-35m-darwin.so, 2): Symbol not found: _fact
Referenced from: /path/to/_example.cpython-35m-darwin.so
Expected in: flat namespace
in /path/to/_example.cpython-35m-darwin.so
エラーは、シンボル_fact
を見つけることができないことを示しています。先頭のアンダースコアがどこから来ているのか分からず、この問題を解決する方法についての情報はありません。ここで
は(tutorialに何があるかと一致する)example.i
次のとおりです。
%module example
%{
#define SWIG_FILE_WITH_INIT
#include "example.h"
%}
int fact(int n);
example.h
とexample.c
もtutorialに何があるかと一致します。必要に応じてここに投稿することができます。
はここsetup.py
です:
# coding=utf-8
from setuptools import Extension, setup
setup(
name = 'SWIG Test',
ext_modules = [Extension('_example', ['example.i'])],
py_modules = ['example'],
)
これはpip install -e . -v
の関連出力されます:
running build_ext
building '_example' extension
swigging example.i to example_wrap.c
swig -python -o example_wrap.c example.i
creating build
creating build/temp.macosx-10.12-x86_64-3.5
/usr/bin/clang -Wno-unused-result -Wsign-compare -Wunreachable-code -fno-common -dynamic -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -pipe -Os -I/opt/local/Library/Frameworks/Python.framework/Versions/3.5/include/python3.5m -c example_wrap.c -o build/temp.macosx-10.12-x86_64-3.5/example_wrap.o
creating build/lib.macosx-10.12-x86_64-3.5
/usr/bin/clang -bundle -undefined dynamic_lookup -L/opt/local/lib -Wl,-headerpad_max_install_names build/temp.macosx-10.12-x86_64-3.5/example_wrap.o -o build/lib.macosx-10.12-x86_64-3.5/_example.cpython-35m-darwin.so
copying build/lib.macosx-10.12-x86_64-3.5/_example.cpython-35m-darwin.so ->
動作しませんでした私が試したいくつかのことを:
- は
fact
を宣言int fact(int n) asm("fact")
として(建物の後、私はインポート時に10)。 - の内線に
swig_opts=['-py3']
を追加します。