python中调用C++写的动态库
一、环境:Windows XP + Python3.2
1. dll对应的源文件(m.cpp):
#include <stdio.h>extern "C"
{_declspec(dllexport) int add(int a, int b){return a+b;}_declspec(dllexport) void print_sum(unsigned long ulNum){while(ulNum != 0){printf("The ulNum is : %u\n", ulNum--);}}
}
2. python源程序:
# coding=GBKfrom ctypes import *
import timeif __name__ == '__main__':time_begin = time.clock()#dll = CDLL("d.dll") # 加载dll方式一dll = cdll.LoadLibrary("d.dll") # 加载dll方式二print(dll.add(2, 6)) # 调用dll中add方法dll.print_sum(100) # 调用dll中print_sum方法t = time.clock() - time_begin # 计算时间差print("Use time: %f" %t) # 打印耗时时间
运行输出:
E:\Program\Python>del
8
The ulNum is : 100
The ulNum is : 99
The ulNum is : 98
...........
The ulNum is : 2
The ulNum is : 1
Use time: 0.003853E:\Program\Python>
二、环境:Fedora12 + Python2.6
1. 动态库源文件(a.cpp):
#include <stdio.h>extern "C"
{int add(int a, int b){return a+b;}void print_sum(unsigned long ulNum){while(ulNum != 0){printf("The ulNum is : %u\n", ulNum--);}}
}
编译指令: g++ -shared -o liba.so a.cpp
2. python源程序(del.py):
#!/usr/bin/env python
# coding=UTF-8from ctypes import *
import timeif __name__ == '__main__':time_begin = time.clock()dll = CDLL("./liba.so") # 加载dll方式一(默认在系统lib库路径下查找.so文件)#dll = cdll.LoadLibrary("./liba.so") # 加载dll方式二print(dll.add(2, 6)) # 调用dll中add方法dll.print_sum(10000) # 调用dll中print_sum方法t = time.clock() - time_begin # 计算时间差print("\nUse time: %s" %t) # 打印耗时时间
运行结果:与windows版本基本相同!
结论:Linux上用Python加载动态库时默认是从系统lib路径下是查找库文件的。所以在python中加载当前路径下的动态库的话,路径要写“./liba.so",否则会提示动态库文件找不到!
python中调用C++写的动态库相关推荐
- qt中调用matlab生成的动态库
前言: 前面已经实现了在vc中调用matlab生成的动态库,请参考:vc中调用matlab生成的动态库 现在在前面已经生成好的matlab动态库的基础上,在qt中调用matlab生成的动态库.生成ma ...
- python中调用c库
python中调用c库 2013-04-23 15:34:52| 分类: python核心编程 | 标签:python makefile |举报 |字号 订阅 参考地址:http://my. ...
- android调用 qt so文件路径,Android Java调用Qt写的so库
有时候,我们反编译apk得到一个so库,如果直接使用这个so库的话,必须使用原来so库同样的package名字,才能用.这样人家反编译你的apk,就知道你侵犯了人家的版权.为了达到混淆的目的,我们可以 ...
- 在Python中调用C/C++:cython及pybind11
在Python中调用C/C++:cython及pybind11 转自:https://zhuanlan.zhihu.com/p/442935082 Python写起来非常方便, 但面对大量for循环的 ...
- 不是python中用于开发用户界面的第三方库-模拟试卷C
原标题:模拟试卷C 一.单项选择题 1. 按照"后进先出"原则组织数据的数据结构是____ 队列 栈 双向链表 二叉树 2. 以下选项的叙述中,正确的是 循环队列有队头和队尾两个指 ...
- 【转】matlab与C/C++混合编程——在Windows/Linux上调用Matlab编译的动态库文件
转自:matlab与C/C++混合编程--在Windows/Linux上调用Matlab编译的动态库文件_sinat_18131557的博客-CSDN博客 date version comments ...
- golang 相互引用_Golang与C互用以及调用C的so动态库和a静态库
Golang与C的关系非常密切,下面主要介绍在Golang中使用C. 一. Golang中嵌入C代码 1 package main 2 3 //#include 4 //#include 5 /* 6 ...
- 在python中调用js或者nodejs要使用PyExecJs第三方包。
在python中调用js或者nodejs要使用PyExecJs第三方包. 使用时:import execjs 这是没有用到nodejs的情况:如果用到nodejs,这种写法会报"Cannot ...
- python中调用C++函数
python中调用C++函数 无参调用 单变量传入与返回调用 numpy数组传入与返回调用 c++类调用 用python写不香吗?还这么复杂调用C++? 一. 无参调用 在python中调用无参数和无 ...
最新文章
- 计算机网络协议分层体系结构
- sql 备份.bat
- centos配置yum本地源
- 学习 WCF (3)--开发WCF客户程序
- spark sql合并小文件_如何比较Hive,Spark,Impala和Presto?
- 【并查集】家族 (ssl 1896)
- c++中vector使用的小问题
- 2021年浙江省高考成绩查询哪里快,2021年浙江高考成绩排名及成绩公布时间什么时候出来...
- java treemap get_java.util.TreeMap.get()
- Java项目_宠物领养系统_不到一小时教会你
- java网吧系统_基于Java的智能网吧管理系统.doc
- 学术会议论文查重吗_会议论文需要进行查重吗?
- 算法竞赛---day2(等差素数列)
- FM1702 13.56MHz RF PCB天线调试经验记录
- python画同心圆程序_如何用python画同心圆并内接一个五角星?
- 达梦数据库备份还原使用
- html表格中加背景图片,html设置表格背景图片.doc
- 【微信小程序学习笔记02理解与初始准备】【实战天气微信小程序】
- ThinkAdmin漏洞(CVE-2020-25540 )复现
- 海量GIS文章,软件教程,GIs编程奉送!!(转)
热门文章
- 关于Restful Web Service的一些理解
- AT91RM9200Linux移植笔记(三)-移植Linux kernel 2.6.17
- 安装ARM交叉编译工具
- 老生常谈–希望别再纠结了朋友
- WindowsXP命令行修改服务启动选项
- spring—拦截器和异常
- assign复制对象_JavaScript标准对象:assign,values,hasOwnProperty和getOwnPropertyNames方法介绍...
- python:列表推导式
- 进程间通信 (IPC) 方法总结(三)
- Elasticsearch使用REST API实现全文检索