python如何调用c语言

python中调用C/C++

一、python中调用c函数((自己运行的)

在C调用Python模块时需要初始化Python解释器,导入模块等,但Python调用C模块却比较简单,下面还是以hello.c 和 hello.py 做一说明:

(1)编写C代码,hello.c代码很简单,只是输出“hello,world”:
    #include<stdio.h>
   int test()
  {
  printf("hello,world");
  }
(2)将编写的C代码编译成动态链接库的形式,具体命令:
gcc hello.c -fPIC -shared -o libhello.so
其中-shared代表这是动态库,-fPIC使得位置独立(如果程序本来就是独立的话会有警告,无视即可),-o指定了输出文件,改成dll后缀一样可以用。
此时在当前目录下就生成了libhello.so 的动态链接库:

(3)在hello.py中导入动态链接库,并调用C函数
这里的ctypes是Python的一个外部库,提供和C语言兼容的数据类型,以方便的调用C编译的静态库和动态库中的函数, 在此可以很肯定的说,ctypes中可定对C的数据类型进行了转换,使用时只需import ctypes ,然后导入动态库即可。
ctypes详细介绍http://www.92to.com/bangong/2016/08-08/9334057.html
import ctypes  
lib = ctypes.cdll.LoadLibrary('./libhello.so')    
lib.test()

(4)在终端下输入Python hello.py, 运行结果:
打印出hello.c中的内容, 说明Python调用C模块成功!

运行过程中出现了OSError: [WinError 193] %1 不是有效的 Win32 应用程序。然后重新安装Python(32位),之前是64位,然后问题就解决了

二、python中调用C++函数(调用动态链接库)

必须在原来的C++代码后面添加extern “C”来辅助(C则不需要,这也是与复用C代码时最大的不同点),不然Python在调用这个构建后的动态链接库时是找不到原来的方法或者函数的,说到底还都是因为当前Python的设定中只能调用C函数,而不能直接调用C++的方法。

(1)C++类文件:Test.cpp

(2)将C++代码编译成动态链接库:g++ Test.cpp -fPIC -shared -o libTest.so

(3)Python调用动态库的文件:Test.py
















  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值