zoukankan      html  css  js  c++  java
  • Windows10系统Python2.7通过Swig调用C++过程

    我用的 python版本是2.7.12:

    Python 2.7.12 (v2.7.12:d33e0cf91556, Jun 27 2016, 15:24:40) [MSC v.1500 64 bit (AMD64)] on win32

    1, 下载Swig

      下载地址:http://www.swig.org/download.html,我下载了最新版本swigwin-4.0.0. 下载后直接解压,把 swig.exe 所在目录添加到系统环境变量 Path中。在 Command中输入 swig -version,如果出现版本号说明添加成功。

    2,编写 c++代码

      头文件 example.h

     1 #pragma once
     2 
     3 #include <iostream>
     4 using namespace std;
     5 
     6 class Example {
     7 public:
     8 
     9     const char* getString();
    10     void setString(const char* str);
    11 };

      example.cpp

     1 #include "example.h"
     2 
     3 void Example::setString(const char* str)
     4 {
     5     cout<<str<<endl;
     6 }
     7 
     8 const char* Example::getString()
     9 {
    10     return "hello";
    11 }

    3,编写 example.i 文件

    1 %module Example
    2 
    3 %{
    4 #include "example.h"
    5 %}
    6 
    7 %include "example.h"

    4,编写 setup.py 文件

    1 from distutils.core import setup,Extension
    2 test_module = Extension('_Example',sources = ['example_wrap.cxx','example.cpp'],)
    3 setup(name = 'example',
    4       version = '0.1',
    5       author = '',
    6       description = 'Simple swig example',
    7       ext_modules = [test_module],
    8       py_modules = ['example'],
    9       )

    5,运行命令 regedit 打开注册表,查看下列路径是否有该键值  productdir:VS安装目录VCAuxiliaryBuild,如果没有则新建目录并添加键值。这个目录"VS安装目录VCAuxiliaryBuild"其实是 vcvarsall.bat 文件所在目录,python要用到vcvarsall.bat。

    HKEY_CURRENT_USERSoftwareWow6432NodeMicrosoftVisualStudio9.0SetupVC

    因为我的VS安装在c:vs2019,所以我设置 productdir:c:vs2019VCAuxiliaryBuild

    6, 打开 Command,cd 到 example.i  文件所在目录,确保 c++文件和 example.i  文件在同一个目录下;输入下列命令:

      swig -python -c++ example.i

      产生文件 Example.py 和 example_wrap.cxx。

    7,Command继续输入命令:

      python2 setup.py build_ext --inplace

     产生 _Example.pyd 文件。如果没有产生这个文件,查看错误原因,如果第 5 步没成功提示 cannot find vcvarsall.bat

    8,Command 输入 Python2 进入 python环境:

    >>> from Example import *
    >>> ex = Example()
    >>> ex.getString()
    'hello'
    >>> ex.setString("hello")
    hello

    说明:最好不要通过 Visual studio 来产生 pyd 文件,因为 python与 VC版本不匹配会出现各种错误提示。比如2.7.12需要MSC v.1500即VS2008版本。

    MS VC++ 14.0 _MSC_VER = 1900 vs2015
    MS VC++ 12.0 _MSC_VER = 1800 vs2013的编译器他的平台是v120
    MS VC++ 11.0 _MSC_VER = 1700 vs2012的编译器他的平台是v110
    MS VC++ 10.0 _MSC_VER = 1600 Visual C++ 2010
    MS VC++ 9.0 _MSC_VER = 1500 Visual C++ 2008
    MS VC++ 8.0 _MSC_VER = 1400 Visual C++ 2005
    MS VC++ 7.1 _MSC_VER = 1310
    MS VC++ 7.0 _MSC_VER = 1300
    MS VC++ 6.0 _MSC_VER = 1200
    MS VC++ 5.0 _MSC_VER = 1100

  • 相关阅读:
    java学习 接口与继承11 默认方法
    java学习 接口与继承10 内部类
    java学习 接口与继承9 抽象类
    java学习 接口与继承8 final
    理解管理信息系统
    vue中的错误日志
    vue中的ref属性
    2.有24颗外观完全一样的小球,其中有一个是空心的,现在只有一个天平,最少称几次能找出这个特殊的球?
    1.有888瓶编了号码的水及10只健康的小白鼠,其中一瓶水有毒,小白鼠饮用毒水一天后会死,最少需要几天可以找到哪瓶水有毒?
    SQL题1两表联查
  • 原文地址:https://www.cnblogs.com/gujf2016/p/11282202.html
Copyright © 2011-2022 走看看