swig | 编写c/c++ 扩展到Python的接口示例程序 | 利用distutils生成动态库(三)

举报
墨理学AI 发表于 2022/01/10 23:10:43 2022/01/10
【摘要】 现有程序 example.c /* File : example.c */ double My_variable = 3.0; /* Compute factorial of n */ int f...

  • 现有程序 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

  
 
  • 1

0-1

  • 此时,IPython 中 import example 报错如下

0-2


利用distutils生成动态库


vim Test.py

import example

print(example.fact(4))

print('墨理')

print(example.fact(8))


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

vim setup.py

from distutils.core import setup, Extension

module_name = 'example'

example_module = Extension('_example',
        sources=['example.c','example_wrap.c'],
        )

setup(
        name = 'moli',
        version = '1.0',
        description = 'molisansheng',
        py_modules = ['Test'],
        ext_modules = [example_module],
        )

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

使用如下命令开始构建

python setup.py build_ext --inplace 

  
 
  • 1

输出大致如下:

running build_ext
building '_example' extension
creating build
creating build/temp.linux-x86_64-3.6
...

  
 
  • 1
  • 2
  • 3
  • 4
  • 5

生成效果如下

3-1

python Test.py 执行测试

python Test.py 

24
40320


  
 
  • 1
  • 2
  • 3
  • 4
  • 5

9-6

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

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

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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