Linux下将c++转换为so文件并利用python调用

2023-05-16

C++转so文件

这里以简单的加法为例,代码如下,add传入两个int的参数,完成加法。主函数main调用add,return结果。这里需要注意的点在于,不能忘记将函数添加到extern C中。原因是python 的ctype可以调用C而无法调用c++,加上extern "C"后,会指示编译器这部分代码按C语言(而不是C++)的方式进行编译。

#include 
using namespace std;

extern "C"{

   double add(int, int);

}
double add(int x1, int x2)
{
    return x1+x2;
}
int main()
{
  int a = 1;
  int b =2 ;
  int c;
  c = add(a,b);
  return c;
}

之后打开窗口,输入以下命令,即将上述cpp文件转换为了so文件,注意so文件的名称必须以lib开头。

g++ add.cpp -fpic -shared -o libadd.so

python调用so文件

import ctypes  
ll = ctypes.cdll.LoadLibrary   

lib = ll("./libadd.so") 
input1 = 100
input2 = 220
result1 = lib.add(input1,input2)
result2 = lib.main()
print(result1,result2)
print '***finish***' 

python调用.so多个C++文件转so文件可以看到最后结果为(320,3)

如果c++中add函数的输入为double,则python调用so文件时需要将输入input1 input2,以及add的输出都转换为double的形式,代码如下:

lib.add.restype = ctypes.c_double
result1 = lib.add(ctypes.c_double(input1),ctypes.c_double(input2))

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux下将c++转换为so文件并利用python调用 的相关文章

随机推荐

  • Ubuntu安装Proxychains4

    平时在使用github的时候 xff0c 偶尔发现无法Clone仓库 xff0c 此时就需要用特别的上网的方式解决 一 安装proxychains4 sudo apt get install proxychains4 注意 国内某些软件源没
  • 关于OLSR协议中的MPR机制的阅读与理解

    主要参考Request For Comments7181 OLSRv2 及RFC文档进行理解 MPR机制简介 简介 MPR MultiPoint Relay多点中继 机制是OLSR Optimized Link State Routing最
  • open /run/flannel/subnet.env: no such file or directory

    查看pod的信息时发现报错 xff1a open run flannel subnet env no such file or directory 一是查看各个节点 xff0c 包括master 节点是否有 run flannel subn
  • maven 依赖com.google.code.kaptcha

    前言 在工程的pom xml文件里已经加了 span class hljs tag lt span class hljs title dependency span gt span span class hljs tag lt span c
  • 灰度共生矩阵GLCM及其matlab实现

    Prerequisites 概念 计算方式 对于精度要求高且纹理细密的纹理分布 我们取像素间距为 d 1 d 1 d 1 以下是方向的说明 我们来看 matlab内置工具箱中的灰度共生矩阵的生成函数graycomatrix gray lev
  • np.max 与 np.maximum

    1 参数 首先比较二者的参数部分 xff1a np max xff1a a axis 61 None out 61 None keepdims 61 False 求序列的最值最少接收一个参数axis xff1a 默认为列向 xff08 也即
  • matlab 中使用 GPU 加速运算

    为了提高大规模数据处理的能力 xff0c matlab 的 GPU 并行计算 xff0c 本质上是在 cuda 的基础上开发的 wrapper xff0c 也就是说 matlab 目前只支持 NVIDIA 的显卡 1 GPU 硬件支持 首先
  • Linux Ubuntu系统设置成中文语言

    1 打开 系统设置 xff1a 可以从右上角弹出菜单 xff0c 选择 System Settings 打开系统设置 也可以点击左侧 xff08 齿轮和扳手 xff09 快捷图标打开 2 首先选择软件更新服务器 xff0c 选择国内的 3
  • VNC 灰屏

    用vnc连接服务器的时候 xff0c 出现了灰屏 xff0c xff08 在xshell可以正常运行 xff09 上面会显示三个checkbox xff1a Accept clipboard from viewers Send clipbo
  • 从零开始学习树莓派4B与ROS历程(1)——安装ubantu系统,ROS以及配置远程SSH(一系列错误解决办法,无显示屏外设也可以安装系列)

    目录 安装ubuntu系统文件 1 使用显示器连接树莓派 2 使用SSH xshell安装 安装ROS 安装ubuntu系统文件 1 下载ubuntu系统文件Ubuntu18版 xff0c 目前最新都是21版本了 xff0c 但是树莓派处理
  • Ubuntu服务器端与客户端(RV1126)配置NFS实现文件夹共享

    这里写目录标题 1 NFS简介2 NFS实现步骤3 测试平台3 NFS安装方法1 xff09 安装 NFS 软件包2 xff09 设置 NFS 共享目录3 xff09 主机启动NFS 4 客户端配置方法1 xff09 连接客户端和服务器2
  • 由xubuntu桌面系统恢复到ubuntu桌面系统

    假定读者原来的系统为ubuntu桌面系统 xff0c 并且根据如下命令更换到xubuntu桌面系统 sudo apt get install xrdp sudo apt get install vnc4server sudo apt get
  • 设置Chrome以https方式访问指定网址

    1 打开Chrome xff0c 在地址栏键入chrome net internals xff0c 回车 2 在HSTS选项卡下的Domain中输入你想要实现这个强制跳转的域名 xff0c 如 twitter com gt https tw
  • winfrom自适应布局技巧

    两个技巧 控件的布局属性 Anchor技巧Dock技巧 FillLeftRightBottomTop 以上方法可能达不到想要的效果 xff0c 可以使用下面的方法 表格布局控件应用 TableLayoutPanel 对控件进行行列编辑 xf
  • x0vncserver

    vncserver By default a logged in user has a desktop provided by X Server on display 0 A user can share their desktop usi
  • k8s安装flannel组件出错

    安装完flannel组建后 xff0c 查看pod xff0c 显示Error 查看log 提示 xff1a Error registering network failed to acquire lease subnet 34 10 24
  • openjdk下载与安装

    openjdk下载与安装 官方网站和文档参考 http openjdk java net install 安装说明 http jdk java net 11 openjdk下载地址
  • DirectUI简介

    DirectUI界面库 取名自微软的一个窗口类名 DirectUIHWND xff0c 意为Paint on parent dc directly 即子窗口不以窗口句柄的形式创建 xff0c 只是逻辑上的窗口 xff0c 绘制在父窗口之上
  • 机器学习 之 Haar特征

    Haar特征 Haar特征原理综述 Haar特征是一种反映图像的灰度变化的 xff0c 像素分模块求差值的一种特征 它分为三类 xff1a 边缘特征 线性特征 中心特征和对角线特征 用黑白两种矩形框组合成特征模板 xff0c 在特征模板内用
  • Linux下将c++转换为so文件并利用python调用

    C 43 43 转so文件 这里以简单的加法为例 xff0c 代码如下 xff0c add传入两个int的参数 xff0c 完成加法 主函数main调用add xff0c return结果 这里需要注意的点在于 xff0c 不能忘记将函数添