zoukankan      html  css  js  c++  java
  • python利用ctypes调用C++动态库

    用python调用C++动态库时,总是提示函数未找到,感觉大家也会遇到这种问题,就记录一下

    先是错误示范

    • 首先编写C++代码,新建test.cpp
    int add(int a,int b){ 
        return a+b;
    
    }
    
    • 利用g++生成动态库

    g++ test.cpp -fPIC -shared -o libtest.so

    • 再编写python调用,新建python_ctypes.py
    import ctypes
    if __name__ == '__main__':
        dl=ctypes.cdll.LoadLibrary
        lib=dl('./libtest.so')
        a=lib.add(2,3)
        print(a)
    
    • python python_ctypes.py就会报以下错误
    AttributeError: ./libtest.so: undefined symbol: add
    

    经过查阅,发现c++的编译后,为了实现重载,函数名会被改变,这时候要使用使用c的方式进行编译,编译后的文件中仍然是定义的函数名。有两种方式解决这个问题

    1. 将文件后缀改为.c,然后利用gcc生成动态库
    2. 使用extern "C" {},申明为C,利用g++使用c的方式编译

    这里推荐第二种方式

    • 重新写test.cpp文件
    #include<iostream>
    extern "C"{
            int add(int,int);
    }
    int add(int a,int b){  // 该函数需要接受三个参数
        return a+b;
    }
    
    • 然后再编译为动态库,调用就没问题了
  • 相关阅读:
    概率算法_二项分布和泊松分布
    数据库_存储过程简介(oracle版)
    机器学习算法_knn(福利)
    统计算法_概率基础
    统计算法_数值/线性关系度量
    Python总结
    Python 冒泡排序法分析
    Oracle练习详解
    LINUX基础了解
    LINUX下OA搭建
  • 原文地址:https://www.cnblogs.com/peng-yuan/p/15043241.html
Copyright © 2011-2022 走看看