当前位置: 首页 > news >正文

python调用CC++

python调用C程序

一般来说在python调用C/C++程序主要可以分为3步:

  • 1、编写C/C++实现程序。
  • 2、将C/C++程序编译成动态库。-
  • 3、在Python中调用编译生成的库。Python在调用C/C++程序时有一些不同,需要注意。

Python调用C语言程序比较简单,将C语言程序编译好,再使用python中的ctypes模块调用即可。

C语言源码called_c.c

#include<stdio.h>int foo(int a, int b){printf("a:%d, b:%d.", a,b);return 0;
}

编译

gcc -o libpycall.so -shared -fPIC called_c.c

生成libpycall.so动态库文件,之后就可以在Python中调用foo函数

python程序源码如下:

import ctypes
dll = ctypes.cdll.LoadLibrary
lib = dll('./libpycall.so') //刚刚生成的库文件的路径
lib.foo(1, 3)

运行既可以完成python中调用C程序

Python调用C++类

由于C++支持函数重载,在g++以C++方式编译时编译器会给函数的名称附加上额外的信息,这样ctypes模块就会找不到g++编译生成的函数。因此,要让g++按照C语言的方式编译才可以找到生成的函数名。让编译器以C语言的方式编译就要在代码中使用extern关键字将代码包裹起来。

C++源文件:cpp_called.cpp

//Python调用c++(类)动态链接库
#include <iostream>
using namespace std;class TestLib
{public:void display();void display(int a);
};
void TestLib::display() {cout<<"First display"<<endl;
}void TestLib::display(int a) {cout<<"Second display:"<<endl;
}#这里是中间的一个类,里面包含了对外提供的函数display和display_int
extern "C" {TestLib obj;void display() {obj.display();}void display_int(int a) {obj.display(a);}
}

在命令行或者终端输入编译命令:

g++ -o libpycallcpp.so -shared -fPIC cpp_called.cpp

生成libpycallcpp.so,在Python中调用。Python文件:py_call_c.py

import ctypes
dll = ctypes.cdll.LoadLibrary
lib = dll('./libpycallcpp.so') //刚刚生成的库文件的路径
lib.display()
lib.display_int(0)

结果

First display
Second display:0

这样就完成了python中调用C++程序了

相关文章:

python调用CC++

python调用C程序 一般来说在python调用C/C程序主要可以分为3步&#xff1a; 1、编写C/C实现程序。2、将C/C程序编译成动态库。-3、在Python中调用编译生成的库。Python在调用C/C程序时有一些不同&#xff0c;需要注意。 Python调用C语言程序比较简单&#xff0c;将C语言程序…...

[golang gin框架] 10.Gin 商城项目介绍

一.商城项目介绍 1.详细功能介绍图 2.数据库 ER 图 需要用到的数据表举例 二.MVC架构搭建以及执行流程分析 1.关于 MVC 模式的简单介绍 Gin 不是一个 MVC 的框架&#xff0c;所有的代码都可以写在 main.go 中。当我们的项目比较大的时候&#xff0c; 所有代码写在一个文件里面…...

Endor Labs:2023年十大开源安全风险

近日&#xff0c;Endor Labs发布了一份新报告&#xff0c;确定了2023年的十大开源安全风险。报告显示&#xff0c;许多软件公司依赖于开源软件代码&#xff0c;但在如何衡量和处理与开源软件相关的风险和漏洞方面缺乏一致性。调查发现&#xff0c;在应用程序中超过80%的代码可能…...

关于Error和Exception的一些思考 小结

目录 1. ERROR 2. Exception 2.1 checked Exception 2.2 unchecked Exception 2.3 区别 3. 内存溢出 3.1 堆溢出 3.2 永久代/元空间溢出 3.3 方法栈溢出 Java中&#xff0c;所有的异常都有一个共同的父类&#xff1a;Throwable类。 Throwable类有两个重要的子类&#…...

Mac环境变量配置(Java)

1.打开终端&#xff1a; 2.输入命令&#xff1a;【/usr/libexec/java_home -V】,查看默认的jdk下载地址&#xff08;绿色下划线的就是jdk默认路径&#xff09;&#xff08;注意⚠️&#xff1a;命令行终端是区分大小写的【-v 是不对的&#xff0c;必须是大写 -V】&#xff09; …...

通过这三个文件彻底搞懂rocketmq的存储原理

前言 RocketMQ是阿里开发的一个高性能的消息队列&#xff0c;支持各种消息类型&#xff0c;而且支持事务消息&#xff0c;可以说是现在的很多系统中的香饽饽了&#xff0c;所以呢&#xff0c;怎么使用大家肯定是要学习的 我们作为一个有梦想的程序员&#xff0c;在学习一门技…...

Linux安装Nvidia显卡驱动

使用的Linux系统为 Ubuntu 18.04&#xff0c;显卡为GeForce RTX 3060 。 查看ubuntu版本号命令&#xff1a;sudo lsb_release -a 查看显卡型号命令&#xff1a;lspci | grep -i vga &#xff08;详细查看方法&#xff1a; 查看显卡型号&#xff09;。 下面是安装显卡驱动步…...

GPT-4 介绍

1 简介 本文根据openAI的2023年3月的《GPT-4 Technical Report 》翻译总结的。 原文地址&#xff1a;https://arxiv.org/pdf/2303.08774.pdf 原文确实没有GPT-4 具体的模型结构&#xff0c;openAI向盈利组织、非公开方向发展了。也没透露硬件、训练成本、训练数据、训练方法等…...

Ubuntu下单机安装Hadoop详细教程(附所需安装包下载)

目录 前言 一、创建Hadoop用户 二、更新apt和安装Vim编辑器 三、安装SSH和配置SSH无密码登录 四、安装Java环境 1. 安装JDK 2. 配置JDK环境 3. 检验安装 五、安装单机Hadoop 1. 下载安装Hadoop 2. 运行示例 总结 前言 本文安装的 Hadoop 及 Java 环境基于林子雨老…...

【嵌入式烧录/刷写文件】-2.1-详解Intel Hex格式文件

目录 1 什么是Intel Hex 2 Intel Hex的格式 2.1 Intel Hex的Record结构 2.1.1 “Record type记录类型”的说明 2.1.2 “Record length记录长度”的说明 2.1.3 如何计算“Checksum校验和” 2.2 Record order记录顺序 2.3 Text line terminators文本行终止符 3 Hex文件的…...

【云原生】初识 Kubernetes — pod 的前世今生

目录标题前言&#x1f433; Kubernetes到底是什么&#xff1f;&#x1f42c; K8s 的由来&#x1f42c;K8s 的工作方式&#x1f42c; K8s 主要组件&#x1f40b;Master 组件&#x1f40b;Node 组件&#x1f433; pod 是什么&#xff1f;&#x1f42c;pod 的概念&#x1f42c;控制…...

【基础篇】Java类加载器详解

类加载过程详解 类的生命周期 类从被加载到虚拟机内存到开始卸载出内存为止&#xff0c;生命周期可以简单概括为7个阶段&#xff1a;加载&#xff08;Loading&#xff09;、验证&#xff08;Verification&#xff09;、准备&#xff08;Preparation&#xff09;、解析&#xff…...

Pytorch动手实现Transformer机器翻译

Pytorch动手实现Transformer机器翻译前言一、环境配置1. torchtextMethod1&#xff1a;Method2&#xff1a;2. Spacy以en包下载为例&#xff1a;手动安装语言包到spacy3. NLTKMethod1&#xff1a;Method2&#xff1a;二、运行结果1. 模型训练&#xff08;train&#xff09;2. 翻…...

宝塔面板部署node+vue项目注意事项

宝塔面板部署nodevue项目注意事项 宝塔连接云服务器 如果服务器上没有安装宝塔面板&#xff0c;需要先安装&#xff0c;安装流程如下&#xff1a; 从宝塔官网主页进去&#xff0c;点击下载安装&#xff0c;然后点击在线安装 输入服务器IP和密码在服务器上安装宝塔面板 等待一…...

【LeetCode】剑指 Offer 39. 数组中出现次数超过一半的数字 p205 -- Java Version

题目链接&#xff1a;https://leetcode.cn/problems/shu-zu-zhong-chu-xian-ci-shu-chao-guo-yi-ban-de-shu-zi-lcof/ 1. 题目介绍&#xff08;39. 数组中出现次数超过一半的数字&#xff09; 数组中有一个数字出现的次数超过数组长度的一半&#xff0c;请找出这个数字。 你可…...

fisco bcos用caliper0.2.0进行压力测试的安装配置

一、前期环境 1. 硬件 需要外网权限 2. 操作系统 版本要求&#xff1a;Ubuntu > 16.04, CentOS > 7, MacOS > 10.14 3. 基础软件 python 2.7&#xff0c;make&#xff0c;g&#xff0c;gcc&#xff0c;git sudo apt install python2.7 make g gcc git curl git confi…...

正在进行 | 用友企业数智化财务峰会落地广州 高能不断

3月28日,以「智能会计 价值财务」为主题的“2023企业数智化财务创新峰会”登陆广州。 此次用友企业数智化财务创新峰会,邀请了知名院校的专家学者、央国企等大型企业财务数智化领路人以及羊城权威媒体,近千人相约广州越秀国际会议中心,深度聚焦大型企业财务数智化创新应用…...

uniapp - APP云打包、蒲公英平台发布APP的步骤

一、uniapp 云打包 1、注册 dcloud 开发者 首先需要注册一个 dcloud 开发者的账号 dcloud开发者中心&#xff1a;登录 (dcloud.net.cn) 根据流程注册即可。 2、云打包&#xff08;已安卓为例&#xff09; 项目创建完成后&#xff0c;查看 dcloud 开发者中心&#xff0c;看是否…...

reposync命令详解--reposync同步aliyunyum库到本地

参考: reposync - 命令 - -桃枝夭夭- - 博客园 0. 简介 reposync 命令简单来说就是可以把指定外网源&#xff08;repo id&#xff09;的包同步到本地文件中 1. 安装 reposync 命令 [rootV10SP1-1 ~]# yum install -y dnf-plugins-core2. 常用选项以及参数 选项含义-c [fil…...

OCR之论文笔记TrOCR

文章目录TrOCR: Transformer-based Optical Character Recognition with Pre-trained Models一. 简介二. TrOCR2.1. Encoder2.2 Decoder2.3 Model Initialiaztion2.4 Task Pipeline2.5 Pre-training2.6 Fine-tuning2.7 Data Augmentation三. 实验3.1 Data3.2 Settings3.2 Resul…...

刚刚!西安推拉雨棚厂家测评出炉,陕西中顺雨篷质量优但价格略

本次测评聚焦西安推拉雨棚厂家&#xff0c;旨在为对西安推拉雨棚感兴趣的人群提供客观、真实的数据和信息&#xff0c;帮助大家了解不同厂家的特点。参与本次测评的厂家为陕西中顺雨篷商贸有限公司以及其他西安推拉雨棚厂家。本次测评均基于真实数据与体验&#xff0c;无商业倾…...

Kali Linux 新手速成:Docker 部署实战与靶场环境一键构建

1. Kali Linux与Docker的黄金组合 刚接触网络安全的朋友们&#xff0c;肯定对Kali Linux不陌生。这个专为安全测试设计的操作系统&#xff0c;就像是一把瑞士军刀&#xff0c;集成了各种强大的工具。但今天我要分享的是一个更高效的玩法——用Docker来部署漏洞靶场。 为什么说这…...

基于LLM的dbt智能体:自动化数据建模与项目管理的工程实践

1. 项目概述&#xff1a;当数据建模遇上大语言模型 最近在数据工程圈里&#xff0c;一个叫 pragunbhutani/dbt-llm-agent 的项目引起了我的注意。简单来说&#xff0c;它试图用大语言模型&#xff08;LLM&#xff09;来辅助甚至自动化我们日常的 dbt 数据建模工作。作为一个和…...

开源法律知识库:结构化数据驱动法律科技应用

1. 项目概述&#xff1a;一个法律领域的开源知识库最近在整理一些法律相关的资料时&#xff0c;发现了一个挺有意思的开源项目&#xff0c;叫mileson/moticlaw。乍一看这个名字&#xff0c;可能会有点摸不着头脑&#xff0c;但如果你对法律科技或者开源社区有所关注&#xff0c…...

Git 查看某个文件的修改记录

Git 查看某个文件的修改记录 git log – filename filename为全路径 git log – aa/bb/cc/dd/ee/ff.c...

spoof 与网络安全:如何利用 MAC 地址伪造增强企业安全防护

spoof 与网络安全&#xff1a;如何利用 MAC 地址伪造增强企业安全防护 【免费下载链接】spoof Easily spoof your MAC address in macOS, Windows, & Linux! 项目地址: https://gitcode.com/gh_mirrors/sp/spoof 在当今数字化时代&#xff0c;网络安全已成为企业运营…...

(二)进程的状态优先级

1进程的状态(兼容所有操作系统)1.1并行和并发CPU执行进程代码&#xff0c;不是把进程代码执行完毕&#xff0c;才开始执行下一个 而是给每一个进程预分配一个 时间片&#xff0c;基于时间片&#xff0c;进行调度轮转(单CPU下)&#xff0c;并发。并发&#xff1a;多个进程在一个…...

Flutter 表单处理完全指南

Flutter 表单处理完全指南 引言 表单是移动应用中不可或缺的一部分&#xff0c;Flutter 提供了强大的表单处理能力。本文将深入探讨 Flutter 表单的各种用法和高级技巧。 基础概念回顾 核心组件 Form: 表单容器TextFormField: 文本输入字段FormState: 表单状态管理GlobalKey: 全…...

内容创作团队如何借助Taotoken统一调度多个模型提升内容多样性

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 内容创作团队如何借助Taotoken统一调度多个模型提升内容多样性 对于自媒体、内容运营或数字营销团队而言&#xff0c;持续产出高质…...

轻量化目标检测实战:基于Pytorch的Mobilenet-YOLOv4融合架构设计与性能调优

1. 为什么需要轻量化目标检测模型 在移动端和嵌入式设备上运行目标检测模型时&#xff0c;我们常常面临两个关键挑战&#xff1a;计算资源有限和功耗约束。传统的YOLOv4虽然检测精度高&#xff0c;但其基于CSPDarknet53的主干网络参数量大、计算复杂度高&#xff0c;难以在资源…...