一、环境: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++写的动态库相关推荐

  1. qt中调用matlab生成的动态库

    前言: 前面已经实现了在vc中调用matlab生成的动态库,请参考:vc中调用matlab生成的动态库 现在在前面已经生成好的matlab动态库的基础上,在qt中调用matlab生成的动态库.生成ma ...

  2. python中调用c库

    python中调用c库 2013-04-23 15:34:52|  分类: python核心编程 |  标签:python  makefile   |举报 |字号 订阅 参考地址:http://my. ...

  3. android调用 qt so文件路径,Android Java调用Qt写的so库

    有时候,我们反编译apk得到一个so库,如果直接使用这个so库的话,必须使用原来so库同样的package名字,才能用.这样人家反编译你的apk,就知道你侵犯了人家的版权.为了达到混淆的目的,我们可以 ...

  4. 在Python中调用C/C++:cython及pybind11

    在Python中调用C/C++:cython及pybind11 转自:https://zhuanlan.zhihu.com/p/442935082 Python写起来非常方便, 但面对大量for循环的 ...

  5. 不是python中用于开发用户界面的第三方库-模拟试卷C

    原标题:模拟试卷C 一.单项选择题 1. 按照"后进先出"原则组织数据的数据结构是____ 队列 栈 双向链表 二叉树 2. 以下选项的叙述中,正确的是 循环队列有队头和队尾两个指 ...

  6. 【转】matlab与C/C++混合编程——在Windows/Linux上调用Matlab编译的动态库文件

    转自:matlab与C/C++混合编程--在Windows/Linux上调用Matlab编译的动态库文件_sinat_18131557的博客-CSDN博客 date version comments ...

  7. golang 相互引用_Golang与C互用以及调用C的so动态库和a静态库

    Golang与C的关系非常密切,下面主要介绍在Golang中使用C. 一. Golang中嵌入C代码 1 package main 2 3 //#include 4 //#include 5 /* 6 ...

  8. 在python中调用js或者nodejs要使用PyExecJs第三方包。

    在python中调用js或者nodejs要使用PyExecJs第三方包. 使用时:import execjs 这是没有用到nodejs的情况:如果用到nodejs,这种写法会报"Cannot ...

  9. python中调用C++函数

    python中调用C++函数 无参调用 单变量传入与返回调用 numpy数组传入与返回调用 c++类调用 用python写不香吗?还这么复杂调用C++? 一. 无参调用 在python中调用无参数和无 ...

最新文章

  1. 计算机网络协议分层体系结构
  2. sql 备份.bat
  3. centos配置yum本地源
  4. 学习 WCF (3)--开发WCF客户程序
  5. spark sql合并小文件_如何比较Hive,Spark,Impala和Presto?
  6. 【并查集】家族 (ssl 1896)
  7. c++中vector使用的小问题
  8. 2021年浙江省高考成绩查询哪里快,2021年浙江高考成绩排名及成绩公布时间什么时候出来...
  9. java treemap get_java.util.TreeMap.get()
  10. Java项目_宠物领养系统_不到一小时教会你
  11. java网吧系统_基于Java的智能网吧管理系统.doc
  12. 学术会议论文查重吗_会议论文需要进行查重吗?
  13. 算法竞赛---day2(等差素数列)
  14. FM1702 13.56MHz RF PCB天线调试经验记录
  15. python画同心圆程序_如何用python画同心圆并内接一个五角星?
  16. 达梦数据库备份还原使用
  17. html表格中加背景图片,html设置表格背景图片.doc
  18. 【微信小程序学习笔记02理解与初始准备】【实战天气微信小程序】
  19. ThinkAdmin漏洞(CVE-2020-25540 )复现
  20. 海量GIS文章,软件教程,GIs编程奉送!!(转)

热门文章

  1. 关于Restful Web Service的一些理解
  2. AT91RM9200Linux移植笔记(三)-移植Linux kernel 2.6.17
  3. 安装ARM交叉编译工具
  4. 老生常谈–希望别再纠结了朋友
  5. WindowsXP命令行修改服务启动选项
  6. spring—拦截器和异常
  7. assign复制对象_JavaScript标准对象:assign,values,hasOwnProperty和getOwnPropertyNames方法介绍...
  8. python:列表推导式
  9. 进程间通信 (IPC) 方法总结(三)
  10. Elasticsearch使用REST API实现全文检索