macOS下实现C++调用Python

概要

一个m2 mac中实现的C++ 调用Python的例程,部分代码来源于北小菜 的讲解例程。自己解决了一些项目中存在的问题,并且写CMake文件用于跨平台编译。

我的系统环境:MacBook Air, Apple M2 chip, macOS Sonoma14.2.1

代码仓库和代码运行流程

代码放在GitHub: https://github.com/KaiwenYu2001/Cpp-call-Python-Demo

获取自己系统里的python-dev头文件和动态库

  • 在我的"/CallFunc/CMakeLists.txt"中有这样一段话:它的功能是在你的系统环境里查找相应python版本的安装目录。我这里用了pyhton3.10,你们可以尝试不同的版本。
    find_package(Python3 3.10 COMPONENTS Interpreter Development REQUIRED)
    if (Python3_FOUND)
        message("Python include directory: " ${Python3_INCLUDE_DIRS})
        message("Python version is: " ${Python3_VERSION})
        message(${Python3_LIBRARIES})
    endif (Python3_FOUND)
    
  • 完成之后,在项目根目录打开>terminal执行下面命令,cmake会帮你打印出python的安装路径。在系统路径中找到python安装目录后复制“include”和“lib”两个文件夹到我们项目的“pythonLib”并覆盖。
    cd CallFunc
    mkdir source 
    cd source
    cmake ..
    
  • 我自己电脑里的安装路径在/opt/homebrew/opt/python@3.12/Frameworks/Python.framework/Versions/3.12/,仅供参考。
  • 在m芯片mac中,python动态库文件的文件名为libpython3.12.dylib,在下一步的编译准备工作中需要用到。

编译前准备工作

  • 需要修改"/CallFunc/main.cpp"中的PyRun_SimpleString("sys.path.append())为自己电脑中python脚本的绝对路径。
  • 修改"/CallFunc/CMakeLists.txt"中的include_directories为"pythonLib"中引入的头文件的存放目录
  • 修改"/CallFunc/CMakeLists.txt"中的target_link_libraries为"pythonLib"中引入的python动态链接库的绝对路径(这里试了很多方法,最后只有绝对路径能正常编译运行)

编译运行

  • 确保在"/CallFunc/source"打开terminal
    cmake ..
    make
    ./source/myCpp
    
    看到打印“c++ is the best”即调用成功。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值