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

网友投稿 1055 2022-05-29

本博文教程在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++和指定的目标语言生成相互接口的代码。

第一部分: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 安装方式如下

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

依赖库 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

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

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 终于搞定

C++ Linux Python

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:云享读书会----《程序员修炼之道》笔记1
下一篇:PVE虚拟化 命令大全
相关文章