VS环境SWIG的Python调用C/C++的完美方案

前几天想做一个C++到python的一个接口,在网上查找资料发现可以使用SWIG进行配置,但是花了一天时间竟然一直也没配成功(无论是gcc手工配置 还是VS配置都失败了) 网上却搜索不到能使我完全配置成功且运行代码的教程。
今天沉下心来仔细配置了一下,发现了一个我认为是最快速、最简单的方法(Windows系统环境下)
本文使用的环境为目前最新环境配置(VS2022,python3.10,swigwin4.0.2)
实际上,不用最新环境配置过程类似,可以兼容
步骤分为简单的3步操作即可,不需要换python版本(只要python3就行)
我尽量使用最简短的描述 且配合图片的形式 将这一过程展现出来。

1.安装swig

首先下载swigwin:swigwin4.02.zip
下载后解压到任意一个盘
并且将swig添加到系统环境变量
配置过程如图所示

在这里插入图片描述

2.配置VS项目

2.1 新建项目

新建项目的时候选择向导,然后点新建dll,这样是为后续步骤最简略的一种新建方式。
在这里插入图片描述

2.2 在项目中添加C/C++代码

这里举一个简单的例子使用

/* jsample.h */
#ifndef JSAMPLE_H
#define JSAMPLE_H
//void cHelloWorld();
int compute(int a, int b);
#endif
/* jsample.cpp */
#include <iostream>
#include "jsample.h"
using namespace std;

int compute(int a, int b)
{
    int temp = (a + b) * (a - b);
    return temp;
}

执行到这一步骤 时你的项目情况应该如下图所示:
在这里插入图片描述

2.3 在项目中配置swig

配置swig需要用到.i 格式文件,在目录下新建jsample.i 文件,并且修改其中的代码为:


/* File : jsample.i */
%module jsample
 
%inline %{
#include "jsample.h"
%}
int compute(int a,int b);

然后在目录下执行

swig -c++ -python jsample.i

如果你是C语言,则执行

swig -c -python jsample.i

执行后生成了一个py文件以及一个cxx文件,py文件可以无视 甚至删除也行,保留cxx文件留作编译
执行完成后需要把cxx文件加入到项目中(关键步骤)之后你的项目应该如下图所示
在这里插入图片描述
有了这些基础后还需要进一步地进行VS配置

2.4 VS进一步配置(关键步骤)

2.1-2.3步骤几乎不会出错。但是我在2.4步骤一开始配置错了导致一直无法运行,所以2.4才是关键步骤
(1)在配置属性-高级中将目标文件扩展名改为.pyd

(2)在项目-属性将VC++目录中的包含目录改为python-include目录
将库目录改为python-libs目录(注意是libs不是Lib)
在这里插入图片描述
(3)然后关键来了,上图配置完成后还需要进行一个单独配置(网上90%教程均没写出这一个配置)
在链接器-输入里面,将附加依赖项添加python3.lib python310.lib(具体情况视你本机安装的python版本而定)
在这里插入图片描述

3.执行代码

上述代码编译后会生成一个文件,将其名字改为_jsample 以供导入
然后把这个.pyd文件和另外一个runme.py文件放在同一个文件夹(可以删除自动生成的jsample.py)
然后可以使用python调用jsample了,注意
如果你用了自动生成的jsample.py 则import jsample
如果你没有使用jsample.py 则像我一样import _jsample

import _jsample
print('this is the test running.\n')
aa = _jsample.compute(5,2)
print(aa)

然后运行代码即可,最终效果图
在这里插入图片描述

4.可能的错误及解决方法

如果你恰好遇到了和我一样的错误,可以看一下这里的解决方法
(1)Dll找不到指定的模块
注意到这个错误的原因是2.4步骤,需要在链接器加入附加项python3.lib和 python310.lib
在这里插入图片描述
(2)No module named 'xxx’
这是另外一种错误的可能,这种错误是目标文件夹下找不到这个文件,注意是文件名,如果你文件是A.py 或者A.pyd 就需要import A
在这里插入图片描述

PS:本文使用的环境为VS2022,而我搜索网上教程却发现网上很多人还在使用老版本,各种VS2015、VS2013等等,现在再次安利给大家VS2022,VS2022体积与VS2019几乎相当,但是各种兼容性方面都很好,而且也对新版SDK的适应性更强。现在不推荐的使用软件有(VC6.0、VS2008)
VC6.0唯一的优势在于对XP系统独一无二的兼容性,但是如果有一种方案可以对XP系统也能兼容,那么就可以不用VC6.0,现在确实发现有了一些不错的方法,我会在后续博客内容中指出。

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值