讲师中心 微信公众号

工具推荐

视频效率加速
立刻MV
立刻MV

低成本歌曲 MV、视频生成

剧云
剧云

中文短剧剧本制作平台

Seko
Seko

AI短剧一键生成成片

Laper
Laper

剧本策划到成片协作

C++怎么调用Python C++和Python混合编程【指南】

梦磊姑娘_2288

梦磊姑娘_2288

发布时间:2026-02-28 13:49:02

|

948人浏览过

|

来源于php中文网

原创

根本原因是C++项目未正确配置Python的C API环境,需确保安装开发包、正确设置头文件路径和链接库、初始化解释器并管理GIL、处理引用计数、保证DLL可见性及运行时匹配。

c++怎么调用python c++和python混合编程【指南】

Python.h 头文件找不到或编译失败

根本原因是 C++ 项目没连上 Python 的 C API 头文件和链接库,不是“调用方式不对”,而是环境没搭对。

  • 确认已安装对应版本的 python3-dev(Ubuntu/Debian)或 python3-devel(CentOS/RHEL),比如 Python 3.10 就要装 python3.10-dev
  • g++ 编译时必须显式加 -I 指向头文件路径(如 /usr/include/python3.10),不能只靠 #include <python.h></python.h>
  • 链接阶段漏掉 -lpython3.10 或路径不对(-L/usr/lib/python3.10/config-3.10-x86_64-linux-gnu)会导致 undefined reference 错误
  • Mac 上用 python3-config --includes 和 python3-config --ldflags 获取准确参数,别硬写路径

Py_Initialize() 后 import 失败或 Segmentation Fault

Python 解释器启动了,但模块路径、运行时状态或线程环境没准备好,一 import 就崩。

  • 调用 Py_Initialize() 后必须立刻调用 PyEval_InitThreads()(Python
  • sys.path 默认不包含当前目录,用 PyRun_SimpleString("import sys; sys.path.insert(0, '.');") 手动加,否则 import mymodule 找不到
  • 避免在多线程 C++ 环境中反复调用 Py_Initialize()/Py_Finalize():它不是线程安全的,且多次初始化会破坏内部状态
  • 如果 Python 代码里用了 numpy 或 torch,确保这些包已在系统 Python 环境中 pip 安装,C++ 不会自动帮你装依赖

从 C++ 传字符串/数组给 Python 函数

不能直接把 std::string 或 std::vector<float></float> 塞进 Python,得转成对应的 PyObject*,否则内存越界或类型错误。

Biopython
Biopython

全面的分子生物学工具集。适用于序列操作、文件解析(FASTA/GenBank/PDB)、系统发育分析,以及通过 Bio.Entrez 以编程方式访问 NCBI/

下载
  • 字符串用 PyUnicode_FromString()(UTF-8)或 PyUnicode_FromWideChar()(wchar_t),别用 PyBytes_FromString() 除非你明确要 bytes
  • float 数组推荐用 PyArray_SimpleNewFromData()(需 NumPy C API),比手动构造 list 快且零拷贝;记得设置 PyArray_ENABLE_CHECKING 调试时捕获 shape/mem 错误
  • 传完对象后注意引用计数:Py_DECREF() 掉临时创建的 PyObject*,否则内存泄漏——尤其在循环中反复调用时
  • Python 函数返回 None 却当成有效对象解包,会触发 SystemError: NULL object passed to Py_BuildValue

Windows 下 DLL 加载失败或找不到 python310.dll

不是代码问题,是动态链接时 runtime 找不到 Python 的 DLL,报错像 ImportError: DLL load failed while importing _ctypes 或直接 crash。

立即学习“Python免费学习笔记(深入)”;

  • 确保 python310.dll(版本号按实际)在系统 PATH 中,或和你的 exe 放同一目录;不要只复制 python3.dll(那是 stub)
  • Visual Studio 项目属性里,C/C++ → General → Additional Include Directories 填 Python 的 include 路径,Linker → General → Additional Library Directories 填 libs 目录(不是 Lib!)
  • Debug/Release 运行时必须匹配:Python 官方版是 MD(动态 CRT),你的 C++ 项目也得设成 /MD,设成 /MT 会因 CRT 冲突导致随机崩溃
  • 用 dumpbin /dependents yourapp.exe 检查是否真链接了 python310.dll,而不是静态链接了 libpython
C++ 调 Python 最容易卡在环境链路上,而不是语法。头文件路径、链接库名、DLL 可见性、GIL 状态——这四个点任何一个没对齐,都会表现为“调不通”“崩得莫名其妙”。别急着改 Python 逻辑,先用 python3-config --ldflags 或 dumpbin 确认底层连接真实存在。

相关文章

编程速学教程(入门课程)
编程速学教程(入门课程)

编程怎么学习?编程怎么入门?编程在哪学?编程怎么学才快?不用担心,这里为大家提供了编程速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

创客贴AI

创客贴AI是一款AI图像与设计工具,AI辅助的智能在线设计工具。

函子Zion

一款支持AI搭建、可视化编辑和多端发布的全栈无代码开发平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

花生AI
花生AI Hot

一款AI视频创作工具,主要用于B站推出的AI视频创作工具,适合需要提升相关任务效率的用户。

Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

相关专题

更多
pip安装使用方法
pip安装使用方法

安装步骤:1、确保Python已经正确安装在您的计算机上;2、下载“get-pip.py”脚本;3、按下Win + R键,然后输入cmd并按下Enter键来打开命令行窗口;4、在命令行窗口中,使用cd命令切换到“get-pip.py”所在的目录;5、执行安装命令;6、验证安装结果即可。大家可以访问本专题下的文章,了解pip安装使用方法的更多内容。

3570

2023.10.09

更新pip版本
更新pip版本

更新pip版本方法有使用pip自身更新、使用操作系统自带的包管理工具、使用python包管理工具、手动安装最新版本。想了解更多相关的内容,请阅读专题下面的文章。

8083

2024.12.20

pip设置清华源
pip设置清华源

设置方法:1、打开终端或命令提示符窗口;2、运行“touch ~/.pip/pip.conf”命令创建一个名为pip的配置文件;3、打开pip.conf文件,然后添加“[global];index-url = https://pypi.tuna.tsinghua.edu.cn/simple”内容,这将把pip的镜像源设置为清华大学的镜像源;4、保存并关闭文件即可。

9782

2024.12.23

python升级pip
python升级pip

本专题整合了python升级pip相关教程,阅读下面的文章了解更多详细内容。

5147

2025.07.23

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

7419

2023.08.02

css中float用法
css中float用法

css中float属性允许元素脱离文档流并沿其父元素边缘排列,用于创建并排列、对齐文本图像、浮动菜单边栏和重叠元素。想了解更多float的相关内容,可以阅读本专题下面的文章。

7607

2024.04.28

C++中int、float和double的区别
C++中int、float和double的区别

本专题整合了c++中int和double的区别,阅读专题下面的文章了解更多详细内容。

904

2025.10.23

c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

569

2023.09.22

Postman身份认证怎么配置
Postman身份认证怎么配置

本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。

80

2026.11.06

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn