1

だから、私は最も単純な構造体アクセスをしようとしています...そしてできません。

よば.h:

typedef struct{
    int bar;
} foo;

よば.i:

%module yoba

%{
#define SWIG_FILE_WITH_INIT
#include "yoba.h"
%}

%include "yoba.h"

setup.py:

import distutils
from distutils.core import setup, Extension


setup(
    name = "yoba",
    version = "0.00",
    ext_modules = [Extension(
        "_yoba",
        ["yoba.i"],
        swig_opts=['-py3', '-c++', '-module','yoba'],
    )]
)

run.bat:

python setup.py build_ext --inplace -ccygwin
pause

だから、私はそのような出力を得ました:

D:\pro\py\mod-test>python setup.py build_ext --inplace -ccygwin 
running build_ext
building '_yoba' extension
swigging yoba.i to yoba_wrap.cpp
D:\tools\cygwin\bin\swig.exe -python -py3 -c++ -module yoba -o yoba_wrap.cpp yoba.i
D:\tools\cygwin\bin\gcc.exe -mcygwin -mdll -O -Wall -ID:\tools\python3.2\include -ID:\tools\python3.2\PC -c yoba_wrap.cpp -o build\temp.win32-3.2\Release\yoba_wrap.o
writing build\temp.win32-3.2\Release\_yoba.def
D:\tools\cygwin\bin\g++.exe -mcygwin -shared -s build\temp.win32-3.2\Release\yoba_wrap.o build\temp.win32-3.2\Release\_yoba.def -LD:\tools\python3.2\libs -LD:\tools\python3.2\PCbuild -lpython32 -lmsvcr90 -o D:\pro\py\mod-test\_yoba.pyd 

すべて問題ないように見えますが、そのようなコードを実行しようとすると:

import yoba


f = yoba.foo()

何も起こらず、「動作中」の Python で 100% の CPU 負荷がかかりました。どんなアイデアでも大歓迎です。

追加:

だから、私は「壊れた」コードを特定しようとしています。そして、私は混乱しています... swigによって生成された _wrap_new_foo にあります。

SWIGINTERN PyObject *_wrap_new_foo(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
  PyObject *resultobj = 0;
  foo *result = 0 ;

  if (!PyArg_ParseTuple(args,(char *)":new_foo")) SWIG_fail;
  result = (foo *)new foo();
  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_foo, SWIG_POINTER_NEW |  0 );
  return resultobj;
fail:
  return NULL;
}

行上:

result = (foo *)new foo();

一体何が?

解決済み:

-ccygwin の代わりに -cmingw32 を使用します。わかりませんが、うまくいきます。

4

0 に答える 0