在linux开发的动态链接库需要被python调用,首先需要生成.so文件。

生成动态链接库的方法网上有很多,主要就是首先根据源文件编译生成.o,然后链接这些.o文件-shared生成.so。需要注意的是,在编译链接生成动态库的时候一定要加-fPIC参数。而且如果在链接时需要链接其他库的话,必须保证其他库编译时也是加了-fPIC参数。这里笔者就是调用了mysql数据库libmysqlclient.a静态库,但是这个库没有加-fPIC编译,所以生成动态库的时候一直报错,说是需要加-fPIC重新编译。最后从网上下载了libmysqlclient的源码,然后加上-fPIC参数重新编译生成.a,问题才解决。

需要注意的是,libmysqlclient是使用cmake,该编译参数需要在CMakeList.txt文件里面修改编译参数加入-fPIC即可。

生成.so文件一定要将引用的其他库引用一起链接,如果不一起链接的话,在python调用的时候会报未定义错误。

生成动态链接库以后就可以在python里面调用了。

调用动态库可以使用ctypes和boost。本次笔者使用ctypes调用.so动态库函数。

调用的方法:

1.在python中引入ctypes:

import ctypes

2.加载动态库

lib_handle = ctypes.CDLL('./xxx.so')

3.关联动态库中的函数

func = lib_handle.func

4.使用函数

func(par1,par2)

需要注意的是,在动态库中定义的全局变量不能在python中这样直接引用,目前引用的方法笔者还没有研究出来。

文章来源:http://blog.csdn.net/garinwang/article/details/6281450

示例:

“test.cpp”

#include <stdio.h>

extern "C"{

void display(){

printf("This is Display Function\n");

}

}

==>g++ test.cpp –fPIC –shared libtest.so

“test.py”

import ctypes

so = ctypes.CDLL("./libtest.so")

so.display()

==>python test.py

Python 下调用C动态链接库 -- (转)的更多相关文章

  1. Python下调用Linux的Shell命令

    有时候难免需要直接调用Shell命令来完成一些比较简单的操作,比如mount一个文件系统之类的.那么我们使用Python如何调用Linux的Shell命令?下面来介绍几种常用的方法: 1. os 模块 ...

  2. c#下调用dll动态链接库[转]

    C# 调用传统的 API 动态链接库,是.NET开发经常被讨论的问题. 比如有这么一个动态链接库(delphi 语言): library DelphiDLL; uses SysUtils, Class ...

  3. python下调用c语言代码

    1)首先,创建一个.c文件,其大体内容如下: 2 #include <Python.h> 99 char * extract(char * path)                    ...

  4. Python下调用json.dumps中文显示问题解决办法

    json.dumps在默认情况下,对于非ascii字符生成的是相对应的字符编码,而非原始字符,例如: import json js = json.loads('{"haha": & ...

  5. python下调用pytesseract识别某网站验证码

    一.pytesseract介绍 1.pytesseract说明 pytesseract最新版本0.1.6,网址:https://pypi.python.org/pypi/pytesseract Pyt ...

  6. python下调用不在环境变量中的firefox

    from selenium.webdriver.firefox.firefox_binary import FirefoxBinary binary = FirefoxBinary(r"D: ...

  7. asp.net下调用Matlab生成动态链接库

    对于这次论文项目,最后在写一篇关于工程的博客,那就是在asp.net下调用matlab生成的dll动态链接库.至今关于matlab,c/c++(opencv),c#(asp.net)我总共写了4篇配置 ...

  8. python学习--同目录下调用 (*.py)及不同目录下调(*.py)

    注:__init__.py 内容为空 1. 同目录下调用 (Contract_Statelog.py)  如图: temp1.py 调用 Contract_Statelog.py中的方法 2. 不同目 ...

  9. 使用ctypes在Python中调用C++动态库

    使用ctypes在Python中调用C++动态库 入门操作 使用ctypes库可以直接调用C语言编写的动态库,而如果是调用C++编写的动态库,需要使用extern关键字对动态库的函数进行声明: #in ...

随机推荐

  1. C语言宏中"#"和"##"的用法

    转自:https://www.cnblogs.com/hnrainll/archive/2012/08/15/2640558.html 在查看linux内核源码的过程中,遇到了许多宏,这里面有许多都涉 ...

  2. Java 多线程 三种实现方式

    Java多线程实现方式主要有三种:继承Thread类.实现Runnable接口.使用ExecutorService.Callable.Future实现有返回结果的多线程.其中前两种方式线程执行完后都没 ...

  3. 用js+css3做一个小球投篮的动画(easing)

    <!DOCTYPE html> <html> <head> <script src="jquery-1.11.3.min.js">& ...

  4. hdu 1688 Sightseeing (最短路径)

    Sightseeing Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  5. html的head内标签

    ctrl+?:自动注释 ctrl+/:  注释多行,再按一次,取消注释的多行. 一,*********本地测试的方法:1-找到文件路径,直接浏览器打开:2-pycharm打开测试. 二,模板的解释: ...

  6. iphone手机与PC蓝牙出现感叹号且无法修复解决方案

    解决方案如下: 1.需要下载Windows Mobile 6.5 的驱动 drvupdate-amd64.exe ,下载需要正版验证,手动安装驱动,具体步骤Google 2. 如果在BlueTooth ...

  7. [NOIP2017]逛公园 最短路图 拓扑序DP

    ---题面--- 题解: 挺好的一道题. 首先我们将所有边反向,跑出n到每个点的最短路,然后f[i][j]表示从i号节点出发,路径长比最短路大j的方案数. 观察到,如果图中出现了0环,那么我们可以通过 ...

  8. 【POJ2976】Dropping Tests(分数规划)

    [POJ2976]Dropping Tests(分数规划) 题面 Vjudge 翻译在\(Vjudge\)上有(而且很皮) 题解 简单的\(01\)分数规划 需要我们做的是最大化\(\frac{\su ...

  9. BZOJ2286:[SDOI2011]消耗战——题解

    +++++++++++++++++++++++++++++++++++++++++++ +本文作者:luyouqi233. + +欢迎访问我的博客:http://www.cnblogs.com/luy ...

  10. Vue报错

    Node Sass could not find a binding for your current environment: OS X 64-bit with Node.js 8.x Found ...