lemoncyb的个人博客分享 http://blog.sciencenet.cn/u/lemoncyb

博文

Python调用C语言so

已有 7267 次阅读 2015-2-10 18:01 |个人分类:python|系统分类:科研笔记


为提高 Python 程序运行效率,可以在 Python 中调用 C 代码。主要可以通过两种方式:

(1)调用源文件 .c 中定义的函数

(2)调用编译成共享库的 so 文件

其中第一种方式可以通过 Cython 方便实现。

第二种方式可以通过 ctypes 实现,举例如下:

首先在 some.so 库文件中定义了 helloworld() 函数,其余步骤如下:

  1. 导入动态链接库

    ctypes 导入 so
    from ctypes import cdll       # 首先导入 ctypes 模块的 cdll 子模块,注意 linux 平台上使用 cdll 的,而不是 windll。
    somelibc = cdll.LoadLibrary(“./some.so”)  # 使用 cdll 模块的 LoadLibrary 导入动态链接库


  2. 访问动态链接库中的函数

    ctypes 使用 so 中的函数
    somelibc. helloworld() # 使用方法与 windows 平台上是一样的。

    整个 helloworld.py 是这样的:

    Python helloworld 代码
    from ctypes import cdll
    def callc():  # load the some.so  
    somelibc = cdll.LoadLibrary(some.so)  
    print somelibc. helloworld()  
    if __name__== “__main__”:  
    callc()

    在命令行运行 helloworld.py,在 linux 标准输出上可以看到 some.so 中 helloworld 的输出。

    Python hellpworld Linux shell 运行输出
    [cuiyb@linux-790t] python ./helloworld.py  Hello World! Just a simple test.





https://blog.sciencenet.cn/blog-935970-867100.html

上一篇:Anaconda 相关: undefined symbol: __log10_finite 解决
下一篇:发明文章列表
收藏 IP: 203.18.50.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-9-27 11:43

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部