精华内容
下载资源
问答
  • linux swig使用
    2021-05-18 00:56:17

    第一次用swig,网上找了各种资料,比如

    http://www.cnblogs.com/kaituorensheng/p/4464117.html

    入门可以看上面这个链接

    但要么过于简单要么过于复杂

    我的需求是,现在有一个C++工程,包括多个.cpp和.h文件,并且使用了外部的.a .so库

    使用python来调用。

    假设python需要调用的C++类及其定义都在头文件hello.h中。

    首先C++程序自己要能跑通

    我们通过swig生成hello.py,并且编译所有.cpp文件,把所使用到的库都链接到hello.py中,然后就可以在python中import hello,使用hello.h中定义的函数和类了

    第一步:

    编写.i文件

    编写hello.i如下

    %module hello

    %{

    #include "hello.h"

    %}

    %include "hello.h"

    运行命令:swig -c++ -python hello.i   生成hello_wrap.cxx

    第二步:(这一步是重点)

    虽然也可以直接使用gcc编译,但是对于复杂的项目来说,利用distutils来配置并编译简单得多

    编写setup.py

    from distutils.core import setup, Extension

    hello_module = Extension('_hello',    #注意这里的名字和下划线,编译你自己的项目时只需要用你的模块名字替换hello就可以了

    include_dirs=['./include'],       #这一行是指定你的头文件的位置,可以指定多个,用逗号分隔

    library_dirs=['./libs'],    #这一行定义你的库文件的位置

    libraries=['lib1‘,'lib2'],   #这一行是重点。如果你的C++中使用了其他.a和.so库,就需要在这里指定,

    这些库文件必须在上一行中指定的目录中

    sources=['hello_wrap.cxx', 'hello.cpp', 'util.cpp'], #这一行中指定要编译的.cpp文件,必须把第一步中生成的.cxx文件和项目中的所有.cpp文件都加进来

    )

    setup (name = 'hello',         #这里定义一些模块的基本信息

    version = '0.1',

    author      = "SWIG Docs",

    description = """Simple swig example from docs""",

    ext_modules = [hello_module],

    py_modules = ["hello"],

    )

    编辑完上面的文件后,运行python setup.py build_ext --inplace

    编译成功会生成hello.py文件

    第三步:

    由于使用到了外部的库,要把库文件的位置告诉系统,否则运行时是找不到这些库的

    运行export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:库的路径

    现在可以试试在python中调用是否成功了

    运行python

    import hello

    h=hello.Hello()   #假如hello.cpp中定义了一个类Hello

    h.func1(arg1,arg2)

    ...

    补充:

    1、如果C++接口参数中带 string或vector,python是识别不了的,需要在.i文件中加入定义

    %include "std_string.i"和%include "std_vector.i"

    并且说明需要支持的vector元素

    例如,需要支持vector,则在.i文件中加入声明如下

    %include "std_vector.i"

    namespace std{

    %template(intVector) vector;

    }

    相当于声明了一个intVector类,可以在python中使用

    更多相关内容
  • linux 安装swig

    2021-11-26 15:05:09
    linux 安装swig

    下载地址:https://sourceforge.net/projects/swig/files/swig/

    tar xvf swig-4.0.2.tar.gz

    cd swig-4.0.2

    ./configure

    make 

    sudo make install

    输入:swig -version 查看是否安装成功

     

    展开全文
  • linux使用SWIG实现Python调用C++ sdk读取相机图片 最近在弄相机的项目,算法用python 在linux使用SWIG实现Python调用C++ sdk读取相机图片,获取Mat图像,并转换成numpy。 另外,多说一句,海康之类的监控...

    linux下使用SWIG实现Python调用C++ sdk读取相机图片

    最近在弄相机的项目,算法用python 在linux下使用SWIG实现Python调用C++ sdk读取相机图片,获取Mat图像,并转换成numpy。
    另外,多说一句,海康之类的监控摄像头支持rtsp协议,opencv 可以打开rtps地址读取摄像头,所以如果只是读取图像,不需要sdk,直接opencv方便实用。

    参考了很多网上的资料:


    SWIG

    SWIG是Simplified Wrapper and Interface Generator的缩写。SWIG本质上是个代码生成器,为C/C++程序生成到其他语言的包装代码(wrapper code,为了生成这些包装代码,SWIG需要一个接口描述文件,描述将什么样的接口暴露给其他语言。SWIG可以直接接受”.h”头文件做为接口描述文件。

    一个小例子

    先写一个C++类,之后用python调用该类。

    //c++源文件
    //example.h
    #include <iostream>
    using namespace std;
    class Example{
    public:
    void say_hello();
    
    //example.cpp
    
    #include "example.h"
    
    void Example::say_hello()
    {
          printf("hello");
    }
    

    再写一个swig模块定义文件如下

    %module example
    %{
    #include "example.h"
    %}
    %include "example.h"
    

    swig -python -c++ example.i,生成example_wrap.cxx和python文件example.py。
    之后利用example_wrap.cxx和example.cpp生成一个链接库,重命名为_example.so,之后利用example.py和_example.so就可以导入example的包了。

    g++ -c -fPIC -I/usr/include/python3.5m example.cpp
    g++ -c -fPIC -I/usr/include/python3.5m example_wrap.cxx
    g++ -shared example.o example_wrap.o -o _example.so -lpython3.5m
    

    使用opencv

    在编写接口文件的时候,要将依赖的头文件都添加进来,而opencv里面的文件繁多,在Github上面有人已经写好了opencv.i

    新的.i文件

    %module example
    %include <opencv.i>
    %cv_instantiate_all_defaults
    
    %{
    #include "example.h"
    using namespace std;
    %}
    
    %include "example.h"
    

    生成example_wrap.cxx和python文件example.py

    swig -I/home/user/opencv-swig/lib/ -I/usr/local/include/ -python -c++ camera_py.i
    

    根据自己的目录改下路径,之后生成.so文件就可以了。需要注意,返回的img要通过np.asarray转换一下类型。

    cam = example.camera_py()
    img = cam.get_img()
    cv2.imshow('frame',np.asarray(img))
    

    喜欢请大打赏

    展开全文
  • linux学习笔记——swig

    2022-06-09 21:37:29
    参考链接:linux 安装swig下载地址:https://sourceforge.net/projects/swig/files/swig/tar xvf swig-4.0.2.tar.gzcd swig-4.0.2./configuremakesudo make install输入:swig -version 查看是否安装成功错误: ...

    一、安装

    参考链接:linux 安装swig

    下载地址:https://sourceforge.net/projects/swig/files/swig/

    tar xvf swig-4.0.2.tar.gz

    cd swig-4.0.2

    ./configure

    make

    sudo make install

    输入:swig -version 查看是否安装成功

    错误:
    ./configure时出现错误 Cannot find pcre-config script from PCRE (Perl Compatible Regular Expressions) library package. This dependency is needed for configure to complete
    原因: Linux下swig的正确安装 | 第一个(C++转Python接口)测试示例 | (二)
    依赖库 PCRE 没有安装
    PCRE 安装了,但是安装的版本和 swig 不匹配
    解决方法:
    可以指定参数 不加载 PCRE 模块
    ./configure --without-pcre

    二、使用:

    作用: swig的作用就是让脚本语言如python调用C/C++的里的函数。本质就是通过输入的c/c++语言生成目标的高级语言。
    参考链接: SWIG-使用C语言扩展Python的神器

    使用步骤

    写一个C代码文件
    编写接口文件(.i)
    对接口文件运行SWIG,会生成一些额外的C语言代码
    原来的C语言代码和生成的一起编译,生成一个库

    编写c源代码

    /* File : example.c */ 
    #include <stdio.h>
    
    int Circle (int x, int y, int radius) {
      /* Draw Circle */
      printf("Drawing the circle...\n");
      /* Return -1 to test contract post assertion */
      if (radius == 2)
        return -1;
      else
        return 1;
    }
    

    编写.i的接口文件

    语法

    /* File : example.i */
    
    /* Basic C example for swig contract */
    /* Tiger, University of Chicago, 2003 */
    
    %module example
    
    %contract Circle (int x, int y, int radius) {
    require:
         x      >= 0;
         y      >= 0;
         radius >  x;
    ensure:
         Circle >= 0;
    }
    
    %inline %{
    extern int Circle (int x, int y, int radius);
    %}
    

    运行swig -python example.i

    输入以上代码,这会生成一个example_wrap.c和example.py文件以及一个Examples文件夹
    在这里插入图片描述
    编译生成目标二进制的.o文件,再生成动态库文件,记住-I后面接的是本地python所在的头文件路径,可以通过find | grep python查找路径。

    gcc -c -fpic example.c example_wrap.c -I/usr/include/python3.5/#将源代码编译生成目标文件,加入-fpic是生成与位置无关的目标文件。
    gcc -shared example.o example_wrap.o -o _example.so#-shared是生成动态库。
    
    展开全文
  • 最近研究如何封装c++给java使用,通过调研发现swig工具能很好的实现次功能。因此把本次研究的整个流程记录下来,以供大家借鉴使用
  • 命令swig -c++ -python -o xxx_wrap.cxx xxx.i 使用.i文件生成.cxx文件与.py文件为了编译生成可用的.so文件,我们需要xxx.cpp的xxx.o文件与xxx_wrap.cxx的xxx_wrap.o文件,使用命令:g++-fPIC -I ./ -c xxx.cppg++ -...
  • linux环境下安装swig

    千次阅读 热门讨论 2019-03-25 16:10:19
    下载swigswig 1 安装 pcre $ tar -zxvf pcre-8.41.tar.gz $ chmod -R 777 pcre-8.41 $ cd pcre-8.41/ $ ./configure $ make $ sudo make install 2 安装swig到默认目录 $ ./configure $ make $ ...
  • 配置环境变量JAVA_BIN和JAVA_INCLUDE。比如: JAVA_BIN:C:\Program Files\Java\jdk-12.0.2\bin JAVA_INCLUDE:C:\Program Files\Java\jdk-12.0.2\include 进入Examples\java\simple目录,用VS2019打开example.dsp。...
  • 半胱氨酸结合 使用SWIG的CGAL绑定 有关详细信息,请参阅 。
  • SWIG是个帮助使用C或者C++编写的软件能与其它各种高级编程语言进行嵌入联接的开发工具。SWIG能应用于各种不同类型的语言包括常用脚本编译语言例如Perl, PHP, Python, Tcl, Ruby and PHP。支持语言列表中...
  • Linux 安装 swig 踩过的坑,基于无root权限解决方案 因为是申请的账号去服务器上跑深度学习代码,所以没有最高权限。 ubuntu 20.4 安装各种东西都是用 源码 安装,一切用sudo的命令都不行,例如swig。 用源码安装...
  • 一天一条Linux指令-swig

    千次阅读 2016-11-07 13:42:57
    用途说明 ...SWIG是个帮助使用C或者C++编写的软件能与其它各种高级编程语言进行嵌入联接的开发工具。SWIG能应用于各种不同类型的语言包括常用脚本编译语言例如Perl, PHP, Python, Tcl, Ruby and PHP。支
  • Linux 苹果系统 视窗介绍| 代码图| C ++ | 痛饮| Python 3 | .Net核心| Java | CI | 执照| 这是一个完整的示例,说明如何使用SWIG代码生成器创建Modern CMake C ++项目,以生成Python,.Net和Java的包装程序和包。...
  • LinuxSWIG安装(无需安装pcre依赖)

    千次阅读 2020-05-31 17:50:02
    官网下载swig-4.0.0.tar.gz;swig-4.0.1下载地址 解压; 进入解压后的目录,依次运行: bash ./configure --prefix=/usr/local/swig-4.0.1 --without-pcre 【注:1. --prefix 后面加上想安装的路径;2.无需安装...
  • swig-4.0.2-windows版本安装包
  • linux/ubuntu16.04系统上snowboy swig源码安装及使用全记录和遇到的错误 零、主要参考: 0.1 官网链接: [github] 建议去官网的github上按照readme.md去做,如果按照官网上的github上的教程走下去没有什么错误...
  • Linux CentOS下安装SWIG方法

    千次阅读 2019-07-18 17:35:36
    1、官网下载swig-4.0.0.tar.gz; 2、解压到指定目录; 3、进入解压后的目录,依次运行指令: bash ./configure --prefix=/usr/local/swig-4.0.0 --without-pcre【即不需要安装pcre依赖】 make && make ...
  • linux安裝swig

    2020-11-12 17:34:24
    git clone https://github.com/swig/swig.git cd swig sudo apt-get install automake ./autogen.sh ./configure sudo apt-get install ...报错,大概率是因为使用的时CentOS系统,下载时,将apt-get改为yum即可 ...
  • 本博文教程在Linux环境下进行C++编译和测试,因此,需要Linux下...第一部分:Linuxswig的安装 查看 gcc 、g++版本 gcc -v Using built-in specs. COLLECT_GCC=gcc .. .. gcc version 7.5.0 (Ubuntu 7.5.0-3ubunt.
  • linux SWIG C++转换为JAVA

    2015-07-13 16:23:28
    先用C++将SDK的框架确定,再同过SWIG转换为JAVA项目
  • tar -xzvf swig-3.0.12.tar.gz cd swig-3.0.12 # 安装到指定目录 ./configure --prefix=/usr/local/share make sudo make install 安装完后需要添加路径到 .bashrc 以便于在任何目录下都可以操作 swig 的命令...
  • swig java使用实例

    2021-02-26 19:20:42
    2、使用VS2010编译所有的c++文件,生成相应的dll (x86或者x64),其他Linux平台生成so =>example.dll example.so ,最后把动态链接库放到当前目录。3、javac *.java4、java runme//example.cppdouble Foo=6.0;int....
  • 利用SWIG将C++接口转换为Java接口 1.1 SWIG接口文件(.i)的编写和使用 @ SWIG需要编写一个后缀为.i的接口文件,用来指定需要从C++类中导出的接口函数; 图2 swig的接口文件 模块名由指定的%module来给出(或者用-...
  • SWIG-SRILM:SRILM语言模型的基于SWIG的包装器==========描述该软件包包含用于为语言模型生成Perl和Python包装器的文件。要求GNU make 简化的包装和接口生成器( ) 本地Python和/或Perl安装SRILM工具箱(v1.7.1)。...
  • 解决方法:使用指令vi -b xxxxx打开报错的文件,发现在第一行有奇怪的字符 将前边的字符删除掉即可。
  • 最近使用Linux系统进行swig的编译时遇到了一些问题,在查阅了各种资料再加上本人的摸索后终于解决了这个问题,所以在此分享一下相关经验,希望能帮到你 问题描述: /usr/bin/ld: 找不到 -lXX 以下是具体问题: /usr/...
  • swig-3.0.12.tar

    2018-01-12 00:04:29
    swig-3.0.12.tar,swig-3.0.12.tar,swig-3.0.12.tar,swig-3.0.12.tar,swig-3.0.12.tar
  • cmake_c++_python_swig

    2022-04-20 15:47:11
    cmake_c++_python_swig
  • 尽管编写PHP扩展并不是特别繁重,但是SWIG很大程度上简化了任务,主要是通过... SWIG有一些先决条件。 最新版本需要PHP V5。 您还必须具有C / C ++编译器(例如GNU编译器集合(GCC))和PHP模块开发工具包(MDK)的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,430
精华内容 2,572
关键字:

linux swig使用