Matplotlib-cpp:C++中的编译及引用
Matplotlib是python中一个实用的绘图工具模块,网友将其移植到c++平台,构建了工具库matplotlib-cpp,总体来讲这个库还是挺实用的,可以用来在c++程序中输出一些简单图像,目前还在不断地完善中。本文介绍matplotlib-cpp在Windows平台上的编译和应用案例。
预置环境
环境准备
- Cmake
- VisualStudio
- Python (安装 Numpy、matplotlib 扩展 )
本机环境
- VisualStudio2015
- Python 3.9.5 x64
下载matplotlib
https://github.com/lava/matplotlib-cpp.git
解压后如下
编辑WinBuild.cmd
WinBuild.cmd
- 打开 \contrib下的 WinBuild.cmd,编辑该脚本,更改为本机环境
# vs版本 14->vs15 15->vs17
# 发行方式 Release
# 本地python路径
if NOT DEFINED MSVC_VERSION set MSVC_VERSION=14
if NOT DEFINED CMAKE_CONFIG set CMAKE_CONFIG=Release
if NOT DEFINED PYTHONHOME set PYTHONHOME=C:/Development/Python/Python39
python 系统环境变量
- python 需要添加在系统环境变量中
高级系统设置 > 环境变量 > 系统变量栏 > 点击 Path 加入python路径
Cmake编译
CMakeLists.txt
- 把 CMakeLists.txt 复制到 contrib 文件夹中,同时编辑之,去掉 整个# Examples 代码段
cmake 文件夹
- 把 cmake 文件夹 复制到 contrib 文件夹中
contrib 文件夹结构
- 最后contrib 文件夹中结构如下
命令行编译
- 打开命令行编译,无异常报错编译通过即可
cd C:\Development\ThirdPartyLib\matplotlib\contrib
WinBuild.cmd
VS项目环境配置
编辑完成后,就可以开始配置vs项目,此时matplotlib相当于一个第三方库,调用即可
新建项目
设置为 Release x64
- 目前支持 Release x64,本文未进行Debug配置,具体可搜索网文参考
包含目录
- VC++目录–>包含目录:需要包括 python、numpy、matplotlib
C:\Development\Python\Python39\include
C:\Development\Python\Python39\Lib\site-packages\numpy\core\include
C:\Development\ThirdPartyLib\matplotlib
库目录
- VC++目录–>库目录:需要包括 python
C:\Development\Python\Python39\libs
链接器
- 链接器–>输入–>附加依赖项:_tkinter.lib、python3.lib、python39.lib
测试编译
// 不需要拷贝matplotlibcpp.h到本项目中,include就行
#include "matplotlibcpp.h"
namespace plt = matplotlibcpp;
int main() {
plt::plot({ 1,3,2,4 });
plt::show();
}
存在报错
重复定义
- 报错如下
C2766 显式专用化;已定义“matplotlibcpp::detail::select_npy_type<int64_t>” pythonSet C:\Development\ThirdPartyLib\matplotlib\matplotlibcpp.h 354
C2766 显式专用化;已定义“matplotlibcpp::detail::select_npy_type<uint64_t>” pythonSet C:\Development\ThirdPartyLib\matplotlib\matplotlibcpp.h 356
- 注释 matplotlibcpp.h 中该段内容
/*
static_assert(sizeof(long long) == 8);
template <> struct select_npy_type<long long> { const static NPY_TYPES type = NPY_INT64; };
static_assert(sizeof(unsigned long long) == 8);
template <> struct select_npy_type<unsigned long long> { const static NPY_TYPES type = NPY_UINT64; };
*/
python版本
- 注意py的版本要与编译环境位数设置相同
无法引用 Python.h
- 已经完整设定VS环境,却一直报错无法引用 Python.h,此时建议重新新建一个项目(重启电脑、VS软件可能都无法解决)
参考
参考文档中可能没有悉数列出步骤,有些不仔细的地方,需要琢磨
https://blog.csdn.net/stjuliet/article/details/104185132
https://cloud.tencent.com/developer/article/1588309
https://mangoroom.cn/cpp/call-matplotlib-on-cpp.html
https://zhuanlan.zhihu.com/p/310073847
其他
Debug模式
- 由于下载的python是Release版本,Debug模式不支持,可以参考该文相关说明
https://blog.csdn.net/stjuliet/article/details/104185132
- 或者在Debug模式中引用release编译
https://mangoroom.cn/cpp/call-matplotlib-on-cpp-2-html.html
直接调用python
- 也可以直接调用python,让python自己调用matplotlib扩展进行作图
https://www.freesion.com/article/21641421026/
https://www.tqwba.com/x_d/jishu/356370.html
标题:Matplotlib-cpp:C++中的编译及引用
链接:http://www.outblue.cc/14
来源:OutBlue Blog
说明:文章版权本站所有,欢迎转载分享,望能备注出处
链接:http://www.outblue.cc/14
来源:OutBlue Blog
说明:文章版权本站所有,欢迎转载分享,望能备注出处
THE END
二维码
共有 0 条评论