简单的Python调用C++程序
一般来说在python调用C/C程序主要可以分为3步1、编写C/C实现程序。- 2、将C/C程序编译成动态库。- 3、在Python中调用编译生成的库。Python在调用C/C程序时有一些不同需要注意。1、Python调用C函数Python调用C语言程序比较简单将C语言程序编译好再使用python中的ctypes模块调用即可。C语言源文件called_c.c代码语言javascriptAI代码解释//编译命令 gcc -o libpycall.so -shared -fPIC called_c.c #includelt;stdio.hgt; int foo(int a, int b){!-- -- printf(a:%d, b:%d., amp;a, amp;b); return 0; }在命令行或者终端输入代码语言javascriptAI代码解释gcc -o libpycall.so -shared -fPIC called_c.c生成libpycall.so动态库文件之后就可以在Python中调用foo函数。Python文件py_call_c.py代码语言javascriptAI代码解释import ctypes dll ctypes.cdll.LoadLibrary lib dll(./libpycall.so) //刚刚生成的库文件的路径 lib.foo(1, 3)运行py_call_c.py输出为代码语言javascriptAI代码解释a:1, b:32、Python调用C类由于C支持函数重载在g以C方式编译时编译器会给函数的名称附加上额外的信息这样ctypes模块就会找不到g编译生成的函数。因此要让g按照C语言的方式编译才可以找到生成的函数名。让编译器以C语言的方式编译就要在代码中使用extern关键字将代码包裹起来。C源文件:cpp_called.cpp代码语言javascriptAI代码解释//Python调用c(类动态链接库 #include lt;iostreamgt; using namespace std; class TestLib {!-- -- public: void display(); void display(int a); }; void TestLib::display() {!-- -- coutlt;lt;First displaylt;lt;endl; } void TestLib::display(int a) {!-- -- coutlt;lt;Second display:lt;lt;alt;lt;endl; } extern C {!-- -- TestLib obj; void display() {!-- -- obj.display(); } void display_int(int a) {!-- -- obj.display(a); } }在命令行或者终端输入编译命令代码语言javascriptAI代码解释g -o libpycallcpp.so -shared -fPIC cpp_called.cpp编译参数说明 -fPIC生成位置无关目标代码适用于动态连接-L path表示在path目录中搜索库文件如-L.表示在当前目录-I path表示在path目录中搜索头文件-o file制定输出文件为file-shared生成一个共享库文件生成libpycallcpp.so在Python中调用。Python文件py_call_c.py代码语言javascriptAI代码解释import ctypes dll ctypes.cdll.LoadLibrary lib dll(./libpycallcpp.so) //刚刚生成的库文件的路径 lib.display() lib.display_int(0)输出为代码语言javascriptAI代码解释First display Second display:0OK基本功能实现高级调用后期在填坑

相关新闻

5分钟搞懂ODS与模态分析:机械工程师必备的动态行为分析工具

5分钟搞懂ODS与模态分析:机械工程师必备的动态行为分析工具

从振动现象到设计洞察:ODS与模态分析的实战融合指南 作为一名长期与旋转机械和复杂结构打交道的工程师,我至今还记得第一次在屏幕上看到一台大型风机叶片实际运行中的变形动画时的那种震撼。屏幕上不再是静态的应力云图,而是叶片随着转速变化…

2026/7/6 8:54:37 阅读更多 →
YOLO11镜像使用指南:从零开始,快速掌握计算机视觉开发环境

YOLO11镜像使用指南:从零开始,快速掌握计算机视觉开发环境

YOLO11镜像使用指南:从零开始,快速掌握计算机视觉开发环境 你是不是对计算机视觉开发充满好奇,但每次想动手实践时,都被复杂的环境配置、依赖安装搞得头大?从安装Python、PyTorch、CUDA,到处理各种版本冲突…

2026/5/17 11:59:51 阅读更多 →
精通SecureCRT日志管理——打造自动化、可追溯的运维审计流水线

精通SecureCRT日志管理——打造自动化、可追溯的运维审计流水线

1. 从“手动记录”到“自动化流水线”:为什么你的SecureCRT日志管理需要升级? 干了这么多年运维,我敢说,至少一半的同行还在用最原始的方式管理SecureCRT的日志。什么叫原始?就是每次连服务器前,手动点一下…

2026/7/4 13:04:13 阅读更多 →

最新新闻

直流电机驱动系统优化:TC78H660FTG与PIC18F87J11方案

直流电机驱动系统优化:TC78H660FTG与PIC18F87J11方案

1. 项目背景与核心器件选型 在工业自动化和消费电子领域,直流电机驱动系统的效率优化一直是工程师面临的关键挑战。TC78H660FTG作为东芝新一代H桥驱动器,与Microchip的PIC18F87J11微控制器组合,为解决这一问题提供了创新方案。 1.1 TC78H66…

2026/7/6 22:19:03 阅读更多 →
Flink Web UI未授权访问漏洞修复实战:从原理到Nginx反向代理加固

Flink Web UI未授权访问漏洞修复实战:从原理到Nginx反向代理加固

1. 项目概述:一次真实的Flink安全加固实战最近在梳理线上数据平台的资产时,安全扫描工具突然弹出一个高危告警:Apache Flink Web Dashboard存在未授权访问漏洞。这个告警让我心头一紧,因为这意味着任何能访问到Flink Web UI地址的…

2026/7/6 22:15:01 阅读更多 →
基于Playwright与飞书API构建电商数据自动化采集与同步系统

基于Playwright与飞书API构建电商数据自动化采集与同步系统

1. 项目概述:当飞书多维表格遇上Playwright自动化最近在帮一个做电商的朋友解决一个头疼事:他每天要手动去几个不同的电商平台后台,把各个商品的销量、库存、评价数抄下来,再填到飞书多维表格里做数据分析。这事儿听着就累&#x…

2026/7/6 22:15:01 阅读更多 →
6D 位姿估计 2024 综述:从 PnP 到 FoundationPose 的 3 大范式演进

6D 位姿估计 2024 综述:从 PnP 到 FoundationPose 的 3 大范式演进

6D位姿估计2024全景:从PnP到FoundationPose的技术跃迁与产业落地1. 技术演进的三次浪潮在增强现实导航手术机器人和智能仓储分拣系统中,精确的物体空间定位能力正成为关键瓶颈。6D位姿估计(3D位置3D旋转)技术历经三次方法论革新&a…

2026/7/6 22:13:00 阅读更多 →
Python Playwright自动化实战:从截图到表单提交的完整指南

Python Playwright自动化实战:从截图到表单提交的完整指南

1. 项目概述:为什么选择Playwright做自动化最近在帮团队处理一个重复性的网页操作任务,需要每天定时登录几个后台系统,截图保存数据报表,再提交一些固定的表单。手动操作不仅耗时,还容易出错。一开始我考虑过Selenium&…

2026/7/6 22:10:59 阅读更多 →
Windows 11/10 内置 OpenSSH 对比 PuTTY:连接阿里云 ECS 的2种密钥方案实测

Windows 11/10 内置 OpenSSH 对比 PuTTY:连接阿里云 ECS 的2种密钥方案实测

Windows 原生OpenSSH与PuTTY深度对比:连接阿里云ECS的密钥管理实战指南1. 密钥连接ECS的核心价值与工具选择每次输入冗长密码连接服务器的日子该结束了。在阿里云ECS的SSH连接场景中,密钥对认证早已成为安全运维的黄金标准。相比传统密码认证&#xff0c…

2026/7/6 22:10:59 阅读更多 →

日新闻

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2与MySQL单元测试兼容性:5个关键SQL语句差异与规避方案1. 单元测试中的数据库兼容性挑战在Java开发领域,单元测试是保证代码质量的重要环节。当应用涉及数据库操作时,测试环境的搭建往往成为开发者的痛点。H2数据库因其轻量级、内存模式和快…

2026/7/6 0:01:17 阅读更多 →
Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘 【免费下载链接】rbtray A fork of RBTray from http://sourceforge.net/p/rbtray/code/. 项目地址: https://gitcode.com/gh_mirrors/rb/rbtray 你是否厌倦了Windows任务栏上密密麻麻的图标&…

2026/7/6 0:01:17 阅读更多 →
Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C 运行时库一键安装终极指南:告别DLL缺失烦恼 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过这样的情况:下载了…

2026/7/6 0:05:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/6 8:11:50 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/6 8:11:52 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/6 6:52:56 阅读更多 →

月新闻