zoukankan      html  css  js  c++  java
  • Python 下调用C动态链接库 -- (转)

    在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 ");

                  }

    }

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

    “test.py”

    import ctypes

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

    so.display()

    ==>python test.py

  • 相关阅读:
    sqlplus 登陆使用
    PLSQL设置显示的字符集及设置
    PL/SQL Developer使用技巧、快捷键
    微信小程序开发常见问题分析
    微信小程序如何使用PHP语言获取数据
    小程序获取网络类型代码
    微信小程序http转https
    小程序和Vue有哪些区别
    微信小程序时间标签与范围联动设计实现
    微信小程序http接口封装怎么实现
  • 原文地址:https://www.cnblogs.com/fendou-999/p/3519832.html
Copyright © 2011-2022 走看看