使用SWIG的C ++到Python - 程序在导入pyd库后停止工作

时间:2013-04-14 13:52:36

标签: c++ python runtime-error swig

早上好,有人可以帮帮我..我很绝望。

我创建了一个将C ++类迁移到python的基本示例。我已成功转换为C ++ - > JAVA,但现在我需要它在Python中。我在Windows 8上的Visual Studio 2010中执行此操作(并在Windows 7 32位上也尝试过)。一切正常,.py生成并且.pyd也生成了,但是当我运行python程序时它会崩溃。它写程序停止工作(经典窗口窗口)。我发现它在库加载时崩溃了。这是这一行:

_mod = imp.load_module('_KatanaWrapper', fp, pathname, description)

但是整个文件都是从SWIG生成的,所以我认为没有错。它一定是SWIG的东西吗?有谁知道吗?

我的方式与description

类似

编辑2x:这是我的c ++代码。没关系......它很简单,可以在c ++中使用。

Test.h

#pragma once

class Test
{
   public:
     Test(void);
     ~Test(void);
     int mySum(int first, int second);
};

TEST.C

#include "Test.h"
Test::Test(void)
{
}

int Test::mySum(int first,int second) {
return first + second;
}
Test::~Test(void)
{
}

编辑:这是我的界面文件(没什么特别的):

/* File : translate.i */
%module KatanaWrapper

%{
/* Includes the header in the wrapper code */
#include "Test.h"
%}

/* Parse the header file to generate wrappers */
%include "Test.h"

这个命令行:

$(SolutionDir)\..\swig\swig.exe -c++ -python %(FullPath)

编辑:有趣的是,当我将此命令更改为

$(SolutionDir)\..\swig\swig.exe -c++ -java %(FullPath)

我必须写入生成的类包(package testapplication;)但它仍然不起作用(java崩溃)但是当我改变这样的命令时:

$(SolutionDir)\..\swig\swig.exe -c++ -java -package testapplication %(FullPath)

有效! PYTHON中有类似的东西吗?可以帮忙吗?

这是VS生成的编译器选项。它有点混乱,也包括Java(用于Java迁移)

  /I"C:\Program Files (x86)\Java\jdk1.7.0_17\include\win32" /I"C:\Program Files (x86)\Java\jdk1.7.0_17\include" /I"C:\Python27\include" /I"C:\Python33\include" /Zi /nologo /W3 /WX- /O2 /Oi /Oy- /GL /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_USRDLL" /D "KATANAWRAPPER_EXPORTS" /D "_WINDLL" /D "_UNICODE" /D "UNICODE" /Gm- /EHsc /GS /Gy /fp:precise /Zc:wchar_t /Zc:forScope /Fp"Release\_KatanaWrapper.pch" /Fa"Release\" /Fo"Release\" /Fd"Release\vc100.pdb" /Gd /analyze- /errorReport:queue 

1 个答案:

答案 0 :(得分:0)

------------求助------------

嗯,我发现了我的问题。我在链接器中包含了python lib文件夹 - >输入 - >这种语法的有条件依赖(必要的):

C:\Python33\libs\*.*

当我把它放到VC ++目录中时 - >具有此语法的库目录:

C:\Python33\libs

它突然起作用。我不明白差异,但它有效,而且很重要。对不起,大惊小怪。