gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:57:34 26 4
gpt4 key购买 nike

早上好,有人能帮帮我吗..我很绝望。

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

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

但是整个文件都是从 SWIG 生成的,所以我不认为有什么问题。一定是 SWIG 的东西?有人知道吗?

我以与此处类似的方式进行操作 description

编辑 2x:这是我的 C++ 代码。没关系......它非常简单,并且可以在 C++ 中运行。

测试.h

#pragma once

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

测试.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 

最佳答案

------------ 已解决------------

嗯,我发现了我的问题所在。我在 Linker -> Input -> Additional Dependences 中包含了 python lib 文件夹,使用这种语法(必需 ):

C:\Python33\libs\*.*

当我将其放入 VC++ Directories -> Library Directories 时,语法如下:

C:\Python33\libs

它突然起作用了。我不明白差异,但它有效而且很重要。抱歉打扰了。

关于使用 SWIG 从 C++ 到 Python - 程序在导入 pyd 库后停止工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15999802/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com