关于在C++里面调用Python(已成功解决)

编程知识 行业动态 更新时间:2024-06-13 00:18:44

        因为有在C++里面调用Python脚本的需要,所以对该问题进行学习,过程中遇到两个问题记录一下,方便大家有同样问题时能够及时解决,而不至于像我一样捣腾了一整天(哭)。

        进入正题:

        首先是按照一篇帖子里面的方法写了一个.cpp文件:

#include <Python.h> //C++调用Python需要引入该头文件


int main(int argc, char *argv[]) 
{

    // 初始化python解释器.C/C++中调用Python之前必须先初始化解释器
    Py_Initialize();
  
    // 执行一个简单的执行python脚本命令
    PyRun_SimpleString("print('hello world')\n");
    
    // 撤销Py_Initialize()和随后使用Python/C API函数进行的所有初始化——即清空Python资源
    Py_Finalize();

    return 0;
}

        代码中每一行的作用均有注释。

        然后开始cmake编译,出现以下两个报错:

        报错一:fatal error: Python.h: 没有那个文件或目录

        错误原因:没有找到Python.h头文件

        解决方法:在CMakeLists.txt文件中添加Python.h头文件所在目录

        具体为在CMakeLists.txt中添加如下行:

include_directories( /home/li/anaconda3/envs/yolov5/include/python3.8 )

        分析:我是用anaconda管理环境的所以我的Python.h头文件会在anaconda文件夹的路径下,大家可以根据自己Python.h文件实际所在路径进行修改。

        评价:添加后无报错fatal error: Python.h:没有那个文件或目录,报错解决。

        在解决上述问题后,编译时出现了新的报错:

        报错二:undefined reference to `Py_SetPythonHome'

        错误原因:没有链接到Python动态库,导致找不到对应库函数

        解决方法:在CMakeLists.txt文件中链接Python动态库

        具体为在CMakeLists.txt中添加如下行:

target_link_libraries( <工程名> 
                        /home/li/anaconda3/envs/yolov5/lib/libpython3.8.so )

        分析:libpython3.8.so中包含了这个Python项目的所有动态库,我们需要把它链接到我们的工程里面,Python脚本才可以正常运行。

        评价:添加后运行编译正常,生成可执行文件,运行得到正确结果。

        完整的CMakeLists.txt如下:

cmake_minimum_required( VERSION 2.8 )
project( expand )

set( CMAKE_BUILD_TYPE Release )
set( CMAKE_CXX_FLAGS "-std=c++11 -O3" )

include_directories( /home/li/anaconda3/envs/yolov5/include/python3.8 )

add_executable( expand expand.cpp )
target_link_libraries( expand 
                        /home/li/anaconda3/envs/yolov5/lib/libpython3.8.so )


        

        Hope it helps !

更多推荐

关于在C++里面调用Python(已成功解决)

本文发布于:2023-03-27 04:38:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/54bf2877da598c164950041967bf3b64.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:Python

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!