热门标签 | HotTags
当前位置:  开发笔记 > 开发工具 > 正文

SWIG源码编译及测试

1、官方介绍SWIG2、下载选择相应版本后点击,然后在Files下下载zip文件,新版本如果弹出注册页面,可以多刷新几次Release3、安装windows10Windows_in

1、官方介绍

SWIG


2、下载

选择相应版本后点击,然后在Files下下载zip文件,新版本如果弹出注册页面,可以多刷新几次

Release


3、安装



  • windows10

    Windows_installation

    直接下载对应版本的zip文件后,如swigwin-4.0.2.zip,解压后,后台运行既可查看版本

    ./swig.exe -version


​ 使用时可以添加环境变量,或者使用CMakeLists配置



  • Linux (Ubuntu18.04)

    unix_installation



​ 下载对应版本的tar.gz文件,如:swig-4.0.2.tar.gz

tar -zxvf swig-4.0.2.tar.gz

解压后执行以下命令

cd swig-4.0.2
bash ./configure --prefix=/usr/local/swig-4.0.2 --without-pcre
make
make install

​ 其中--prefix表示安装路径,--without-pcre表示不依赖pcre,更多细节可以运行./configure --help查看


4、使用文档

Doc HTML


5、示例


5.1 源文件



  • test.h

    #include
    int add(int a, int b);
    int sub(int a, int b);


  • test.cpp

    #include "test.h"
    int add(int a, int b)
    {
    return a + b;
    }
    int sub(int a, int b)
    {
    return a - b;
    }


  • test.i

    %module test
    %{
    #define SWIG_WITH_INT //python needs init file
    #include "test.h"
    %}
    %include "test.h"



5.2 swig打包

生成pythonTest_warp.cxx文件

swig -c++ -python -o pythonTest_warp.cxx test.i

完成后目录下会生成pythonTest_warp.cxx 和 test.py 文件


5.3 生成库文件


方式一 python

编写setup.py文件,然后生成相应库文件



  • setup.py

    from distutils.core import setup, Extension
    test_module=Extension("_test",
    sources=["pythonTest_warp.cxx",
    "test.cpp"],
    )
    setup(name="test",
    version="0.1",
    author="ZJH",
    description="Simple swig c++ to python",
    ext_modules=[test_module],
    py_modules=["test"]
    )

    python setup.py build


  • 测试

    testrun.py

    >>> import test
    >>> test.add(1, 2)
    3
    >>> test.sub(1, 0)
    1



方式二 C++

编写CMakeLists.txt文件

cmake_minimum_required(VERSION 3.10)
# set the project name
project(SwigTest VERSION 1.0)
# set verbose makefile
set(CMAKE_VERBOSE_MAKEFILE ON)
# specify the C++ standard
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)
add_library(testLib test.cpp)
if(WIN32)
include_directories(
E:/Anaconda/Anaconda3/include
)
link_directories(
E:/Anaconda/Anaconda3/libs/
)
else()
include_directories(
/usr/include/python3.6
)
link_directories(
/usr/bin/
)
endif()
add_library(${PROJECT_NAME} SHARED
pythonTest_warp.cxx
)
# set(PYTHON_INCLUDE_DIRS E:/Anaconda/Anaconda3/include)
# set(PYTHON_LIBRARIES E:/Anaconda/Anaconda3/libs/python36.lib)
# message(${PYTHON_LIBRARIES})
# target_link_libraries(${PROJECT_NAME} ${PYTHON_LIBRARIES})
if(WIN32)
target_link_libraries(${PROJECT_NAME} python36 testLib)
else()
target_link_libraries(${PROJECT_NAME} python3.6m testLib)
endif()
set_target_properties(${PROJECT_NAME} PROPERTIES PREFIX "_")
if(WIN32)
set_target_properties(${PROJECT_NAME} PROPERTIES SUFFIX ".pyd")
else()
set_target_properties(${PROJECT_NAME} PROPERTIES SUFFIX ".so")
endif()
set_target_properties(${PROJECT_NAME} PROPERTIES OUTPUT_NAME "test")


推荐阅读
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • 本文介绍了关于apache、phpmyadmin、mysql、php、emacs、path等知识点,以及如何搭建php环境。文章提供了详细的安装步骤和所需软件列表,希望能帮助读者解决与LAMP相关的技术问题。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • 如何去除Win7快捷方式的箭头
    本文介绍了如何去除Win7快捷方式的箭头的方法,通过生成一个透明的ico图标并将其命名为Empty.ico,将图标复制到windows目录下,并导入注册表,即可去除箭头。这样做可以改善默认快捷方式的外观,提升桌面整洁度。 ... [详细]
  • 本文介绍了在Win10上安装WinPythonHadoop的详细步骤,包括安装Python环境、安装JDK8、安装pyspark、安装Hadoop和Spark、设置环境变量、下载winutils.exe等。同时提醒注意Hadoop版本与pyspark版本的一致性,并建议重启电脑以确保安装成功。 ... [详细]
  • 【Windows】实现微信双开或多开的方法及步骤详解
    本文介绍了在Windows系统下实现微信双开或多开的方法,通过安装微信电脑版、复制微信程序启动路径、修改文本文件为bat文件等步骤,实现同时登录两个或多个微信的效果。相比于使用虚拟机的方法,本方法更简单易行,适用于任何电脑,并且不会消耗过多系统资源。详细步骤和原理解释请参考本文内容。 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • macOS10.12安装win10系统教程,实现双系统安装
    本文介绍了如何在macOS10.12系统上安装win10系统,实现双系统的安装。通过使用Boot Camp助理,选取win10系统镜像并分配系统容量,然后进行安装。安装完win10系统后,安装驱动并重启系统即可完成双系统的安装。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
author-avatar
E阳光男孩
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有