python 调用so dll动态链接库

ctypes使得python能够直接调用c语言开发的动态链接库,非常强大。
为了使用CTypes,你必须依次完成以下步骤:
* 编写动态连接库程序
* 载入动态连接库
* 将Python的对象转换为ctypes所能识别的参数
* 使用ctypes的参数调用动态连接库中的函数

一、Windows下使用Python的ctypes调用Dll动态链接库

  1. 编写dll文件

    打开VS2008,新建一个VC工程,选择Win32类型,Win32项目,用程序类型选择DLL………
    调用方式见Linux调用方式。

二、Linux下使用Python的ctypes调用so动态链接库

  1. 编写so文件
    1//test.h
    2#include   "stdio.h"
    3 
    4void test();
    5float add(float,float);
    01//test.c
    02#include "test.h"
    03 
    04void test()
    05{
    06    printf("Hello Dll...\n");
    07}
    08 
    09float add(floata, float b)
    10{
    11    returna + b;
    12}
    1gcc -fPIC -shared test.c -o libtest.so
    2 
    3#-fPIC  编译成位置无关代码,必须  不然你的程序在别的地方肯可能运行不了  
    4#-shared  当然是说要编译成共享库了
  2. Python调用so动态链接库
    01#!/usr/bin/env python
    02# -*-coding:UTF-8-*-
    03 
    04print "sss"
    05 
    06from ctypes import *
    07 
    08test =cdll.LoadLibrary("./libtest.so")
    09 
    10test.test()
    11 
    12add =test.add
    13add.argtypes =[c_float, c_float] # 参数类型,两个float(c_float内ctypes类型)
    14add.restype =c_float
    15 
    16print add(1.2,19.2)

发的

Related posts:

  1. Flash/Python Socket之前使用Python socket都从socket.socket server_ …继续阅读 »...
  2. Python WebSocket Server手机中,使用HTML5中引入的WebSocket技术来取代PC端基于flash的 …继续阅读 »...
  3. Python 手册[url]http://www.uplinux.com/download/doc …继续阅读 »...
  4. Linux中C/C++头文件说明1、 Linux中一些头文件的作用: <assert.h>:ANSI …继续阅读 »...
  5. 及时阻止SSH暴力破解入侵者方法最近,老是发现有很多暴力破解SSH密码的入侵者,虽然服务器密码设置的很复杂,但是 …继续阅读 »...

转自:http://www.xinze.me/python-%E8%B0%83%E7%94%A8so-dll%E5%8A%A8%E6%80%81%E9%93%BE%E6%8E%A5%E5%BA%93/


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用Python创建动态链接库DLL),你可以使用`ctypes`库。下面是一个简单的示例: 1. 首先,创建一个Python脚本(例如,`example.py`),并在其中编写你的函数或代码逻辑。 ```python # example.py def add_numbers(a, b): return a + b ``` 2. 使用`cython`库将Python代码转换为C代码。你可以使用以下命令安装`cython`: ``` pip install cython ``` 然后,创建一个名为`example.pyx`的文件,其中包含以下内容: ```python # example.pyx def add_numbers(a, b): return a + b ``` 3. 创建一个名为`setup.py`的文件,用于构建和编译动态链接库。在其中添加以下代码: ```python # setup.py from distutils.core import setup from Cython.Build import cythonize setup(ext_modules=cythonize("example.pyx")) ``` 4. 打开命令提示符或终端,并导航到包含上述文件的目录。然后运行以下命令来构建和编译动态链接库: ``` python setup.py build_ext --inplace ``` 这将生成一个名为`example.so`(Linux / macOS)或`example.dll`(Windows)的动态链接库文件。 5. 现在你可以在其他Python脚本中使用这个动态链接库。例如,创建一个名为`main.py`的文件,并添加以下代码: ```python # main.py from ctypes import CDLL # 加载动态链接库 example = CDLL('./example.so') # 替换为example.dll(Windows) # 调用动态链接库中的函数 result = example.add_numbers(2, 3) print(result) ``` 运行`main.py`脚本,将会输出结果 `5`。 这就是使用Python创建动态链接库的基本步骤。你可以根据自己的需求进行修改和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值