SWIG - C ++ код в Python - PullRequest
       60

SWIG - C ++ код в Python

0 голосов
/ 24 мая 2018

Я попытался импортировать сгенерированный модуль SWING, но я получил ошибку ImportError:

>>> import ava
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "ava.py", line 28, in <module>
    _ava = swig_import_helper()
  File "ava.py", line 24, in swig_import_helper
    _mod = imp.load_module('_ava', fp, pathname, description)
ImportError: ./_ava.so: undefined symbol: _Z7turn_aiPPiiii
>>> 

Я следовал учебному пособию SWIG (http://www.swig.org/tutorial.html) и скомпилировал свой main.cpp следующим образом:

swig -python -c++ ava.i
c++ -fPIC -c ava_wrap.cxx -I/usr/include/python2.7/
c++ -shared ava_wrap.o -o _ava.so

и я попытался расширить свои функции до c:

extern "C" {
  bool isEnd(int** t, int x, int y, int K, int J);
  void tout(int** t, int K);
  koord turn(int** t, int player, int K, int J);
  koord turn_ai(int** t, int player, int K, int J);
  bool isPat(int** t, int K);
  ai_res turn_ai_3x3_v2(int** t, int turn);
  ai_res turn_ai_pre(int** t, int turn, int K, int J, int dep);
  ai_res turn_ai_(int** t, int turn, int K, int J, int ab, int dep);
  bool isSeparated(int** t, int K, int i, int j);
  std::vector<koord> stepsFun(int** t, int K);
  bool isEmpty(int** t, int K);
  int value(int** t, int K);
  int fofug();
}

1 Ответ

0 голосов
/ 21 июля 2018

Проблема с командами c++.Ваш _ava.so содержит оболочки SWIG, но в нем отсутствуют реализации для turn_ai и т. Д.

Внимательно посмотрите на учебное пособие по SWIG, есть example.c и example.o, которые содержат реализации fact,my_mod и т. Д.

...