Linux下swig的正确安装 | 第一个(C++转Python接口)测试示例 | (二)

举报
墨理学AI 发表于 2022/01/11 01:14:11 2022/01/11
【摘要】 本博文教程在Linux环境下进行C++编译和测试,因此,需要Linux下C++环境可用 本博文相关代码主要来自于官方 PDF文档查阅链接 一个博主的win10 下 Swig使用教程 文档...

本博文教程在Linux环境下进行C++编译和测试,因此,需要Linux下C++环境可用
本博文相关代码主要来自于官方 PDF文档查阅链接
一个博主的win10 下 Swig使用教程


文档查阅


PDF 文档查阅链接

http://www.swig.org/Doc4.0/index.html

SWIG 的作用:

SWIG的主要目的是简化将C / C ++与其他编程语言集成的任务;

SWIG本质上是一个生成代码的工具,用于使C/ c++代码对其他各种编程语言可用。
这些高级编程语言是SWIG代码生成器的目标语言,而C或c++是输入语言。
运行SWIG时必须指定单一目标语言,这将导致为C/ c++和指定的目标语言生成相互接口的代码。

0


第一部分:Linux下swig的安装


  • 查看 gcc 、g++版本
gcc -v

Using built-in specs.
COLLECT_GCC=gcc
..
..
gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04) 

g++ -v
Using built-in specs.
COLLECT_GCC=g++
..
..
gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04) 


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • Linux系统下 root 用户 和 普通用户的 swig 安装方式如下

0


出现如下报错的可能原因:

  • 依赖库 PCRE 没有安装
  • PCRE 安装了,但是安装的版本和 swig 不匹配
configure: error: 
        Cannot find pcre-config script from PCRE (Perl Compatible Regular Expressions)
        library package. This dependency is needed for configure to complete,
        Either:
        - Install the PCRE developer package on your system (preferred approach).
        - Download the PCRE source tarball, build and install on your system
          as you would for any package built from source distribution.
        - Use the Tools/pcre-build.sh script to build PCRE just for SWIG to statically
          link against. Run 'Tools/pcre-build.sh --help' for instructions.
          (quite easy and does not require privileges to install PCRE on your system)
        - Use configure --without-pcre to disable regular expressions support in SWIG
          (not recommended).


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

解决方法上一篇博文有亲测的安装教程:

SWIG简介 | win10和Linux下的安装 | 第一讲

指定参数 不加载 PCRE 模块 – 也可以解决该问题

# 删除已有 swig ,重新 下载 操作如下

wget http://prdownloads.sourceforge.net/swig/swig-4.0.2.tar.gz
tar zxvf swig-4.0.2.tar.gz 

cd swig-4.0.2

./configure --without-pcre 
make -j
make install

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

第一个(C++转Python接口)测试示例


下面命令的执行,可能会需要参考:

Linux系统 搜索 Python.h 位置

我这是swig转化测试主要参考 :2.4.4 Building a Python module

  • 现有程序 example.c
/* File : example.c */
double My_variable = 3.0;

/* Compute factorial of n */
int fact(int n) {
	if (n <= 1)
		return 1;
	else
		return n*fact(n-1);
}

/* Compute n mod m */
int my_mod(int n, int m) {
	return(n % m);
}


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 现有程序 example.i
/* File : example.i */
%module example
%{
/* Put headers and other declarations here */
extern double My_variable;
extern int fact(int);
extern int my_mod(int n, int m);
%}

extern double My_variable;
extern int fact(int);
extern int my_mod(int n, int m);


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 步骤操作如下:

swig -python example.i

# 编译得到 .o 静态库
gcc -c -fpic example.c example_wrap.c -I/usr/include/python3.5

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 查看效果如下:

ll

total 192
drwxrwxr-x 2 zengql zengql   4096 Mar 10 17:24 ./
drwxrwxr-x 6 zengql zengql   4096 Mar 10 16:52 ../
-rw-rw-r-- 1 zengql zengql    212 Mar 10 12:01 example.c
-rw-rw-r-- 1 zengql zengql    255 Mar 10 12:14 example.i
-rw-rw-r-- 1 zengql zengql   1568 Mar 10 17:24 example.o
-rw-rw-r-- 1 zengql zengql   2197 Mar 10 17:13 example.py
-rw-rw-r-- 1 zengql zengql 110768 Mar 10 17:13 example_wrap.c
-rw-rw-r-- 1 zengql zengql  53608 Mar 10 17:24 example_wrap.o


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 生成得到 一个 Python 可用的 so 动态库

gcc -shared example.o example_wrap.o -o _example.so


  
 
  • 1
  • 2
  • 3
  • 测试 import example 是否成功
python
Python 3.6.4 |Anaconda, Inc.| (default, Jan 16 2018, 18:10:19) 
[GCC 7.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import example
>>> example.fact(4)
24
>>> example.fact(8)
40320


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

至此,第一个swig 工具 C++转Python接口 的小 demo 终于搞定


9-9

文章来源: positive.blog.csdn.net,作者:墨理学AI,版权归原作者所有,如需转载,请联系作者。

原文链接:positive.blog.csdn.net/article/details/114412554

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。