IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> MathGL windows cmake编译 -> 正文阅读

[开发工具]MathGL windows cmake编译

0、demo运行成功

?MathGL使用参考①:
C++数据可视化MathGL使用简示_vaincury的博客-CSDN博客_c++ 数据可视化

?

一、MathGL cmake编译

?工具:MathGL

MathGL使用参考①:
C++数据可视化MathGL使用简示_vaincury的博客-CSDN博客_c++ 数据可视化

?文中作者编译好的:登录 - Gitee.com

?按照作者编译好的方式,并将配置导入工程,出现的错误为:

?

编译没通过的根本原因:2.2节的动态库、静态库没配置好。

1. link2019的问题描述为:
?

1.1 P.S. lib和dll的区别?

lib为静态库;dll为动态库,在运行的时候使用,一般放在exe所在目录下。
link一般时找不到源文件.cpp的位置,即lib的位置

2 MathGL通不过,只要自己重新编译MathGL

MathGL编译需要的材料

  1. MathGL源码:V8.0
  2. cmake——cmake gui挂了,改用cmake命令行。cmake gui容易出现路径问题
    windows & linux下cmake gui都容易出现莫名error,无法解决。碰运气。
    最好还是熟悉一下cmakeFileLists.txt中的内容,然后命令行给参数,来编译!遇到好多次坑了。
  3. zlib——————安装了annoconda的话,里面直接就有。自己重新编还挺头疼的
  4. libpng————annoconda直接就有。自己重新编还挺头疼的

1. MathGL源码下载,地址:Download (MathGL 8.0)

?

?

?2. cmake下载——『略去不表』

3. libpng下载 & zlib下载——我是annoconda自带,没有用下载的这些
地址:libpng Home Page

libpng 以 ANSI C (C89) 源代码的形式提供,需要zlib 1.0.4?或更高版本(出于性能和安全原因,建议使用1.2.5或更高版本)。

?

?zlib下载地址:zlib Home Site?

?2.1 使用cmake进行编译

参考教程:C++可视化利器MathGL的Windows编译指南_vaincury的博客-CSDN博客_mathgl

?①cmake的bug

bug现象:“error in configuration process project files may be invalid”?

?

?bug原因:未知

解决办法:!!!!! 换cmake 命令行用

之前遇到过类似问题:但用命令行cmake没有问题,cmake-gui就有问题?

?② 使用命令行cmake来编译

?

?③ 解决办法:使用vs2019的Native Tools Command Prompt工具打开命令行

进入mathgl的文件夹?

?

1. 输入一下命令,表明libpng和zlib的位置,然后编译。?
一定要找准libpng的位置,而且这里给的是release的lib和include,所以VS2019的编译要通过Release编译。

?cmake命令行设置如下:给出几个路径,include路径、lib路径;还区分是Release的路径和Debug的路径。

cmake . -DPNG_LIBRARY_RELEASE="D:/miniconda3/Library/lib/libpng.lib" -DPNG_PNG_INCLUDE_DIR="D:/miniconda3/Library/include" ZLIB_INCLUDE_DIR="D:/miniconda3/Library/include" -DZLIB_LIBRARY_RELEASE="D:/miniconda3/Library/lib/z.lib" enable-mgl2=true

2. 编译结果:?

3. 生成了解决方案:然后使用vs2019打开.sln,进行编译?

?出现的

?出现的问题:unicode乱码 不用care这个问题

Visual Studio 2019修改编码UTF-8_有人_295的博客-CSDN博客_vs编码格式在哪改

?4. 编译成功:mgl-static为启动项

?

5. 看源码里面的demo教程

mathGL doc 教程位置:http://mathgl.sourceforge.net/doc_en/index.html

由于MathGL官网上面没有看到C++的太多教程只有一个,如下:

教程一:

#include <mgl2/mgl.h>
int main()
{
  mglGraph gr;
  gr.FPlot("sin(pi*x)");
  gr.WriteFrame("test.png");
}

教程二:来自? C++数据可视化MathGL使用简示_vaincury的博客-CSDN博客_c++ 数据可视化

#include "mgl2/mgl.h"
int main(int, char **)
{
    using namespace cv;
    //创建gr对象,指定图像大小为800x500,kind=0说明不使用OpenGL
    mglGraph gr(0,800,500);
    
    //数据准备
    std::vector<float> datavec1{ 1,2,3,4,5,6 ,7,};
    std::vector<float> datavec2{ 2,4,9,1,6,8, 8,};
    mglData x(datavec1);
    mglData y(datavec2);

    //通过给定数据计算合适的显示范围
    auto minx = *std::min_element(datavec1.begin(), datavec1.end());
    auto miny = *std::min_element(datavec2.begin(), datavec2.end());
    auto maxx = *std::max_element(datavec1.begin(), datavec1.end());
    auto maxy = *std::max_element(datavec2.begin(), datavec2.end());
    auto x_margin = (maxx - minx) / datavec1.size();
    auto y_margin = (maxy - miny) / datavec2.size();
    
    gr.SetRanges(minx - x_margin, maxx + x_margin, miny - y_margin, maxy + y_margin);
    //显示坐标轴
    gr.Axis();
    //显示图片框
    gr.Box();
    //Plot、Barh、Mark等等可选
    gr.Plot(x, y, "y+");

    //用OpenCV显示图片
    Mat pic(gr.GetHeight(), gr.GetWidth(), CV_8UC3);
    pic.data = const_cast<uchar*>(gr.GetRGB());
    imshow("test", pic);

    //保存图片
    std::cout << "write image as \"test.png\"." << std::endl;
    gr.WritePNG("test.png");  // Don't forget to save the result!
    
    waitKey();
    return 0;
}

教程三:

int sample(mglGraph *gr)
{
  mglData y0(50); 	y0.Modify("sin(pi*(2*x-1))");
  gr->SubPlot(2,2,0);
  gr->Plot(y0);   	gr->Box();
  gr->SubPlot(2,2,1);
  mglData y1(50,2);
  y1.Modify("sin(pi*2*x-pi)");
  y1.Modify("cos(pi*2*x-pi)/2",1);
  gr->Plot(y1);   	gr->Box();

  mglData x(50);  	x.Modify("cos(pi*2*x-pi)");
  gr->Plot(x,y0,"Y+");

  gr->Plot(y1.SubData(-1,0),y1.SubData(-1,1),"q|");
  gr->SubPlot(2,2,2);	gr->Rotate(60,40);
  mglData z(50);  	z.Modify("2*x-1");
  gr->Plot(x,y0,z);	gr->Box();

// Functions plot and subdata make 3D curve plot but for single array. Use it to put circle marks on the previous plot:
  mglData y2(10,3);	y2.Modify("cos(pi*(2*x-1+y))");
  y2.Modify("2*x-1",2);
  gr->Plot(y2.SubData(-1,0),y2.SubData(-1,1),y2.SubData(-1,2),"bo ");
// Note that line style is empty ‘ ’ here. Usage of other 1D plotting functions looks similar:
  gr->SubPlot(2,2,3);	gr->Rotate(60,40);
  gr->Bars(x,y0,z,"r");	gr->Box();
  return 0;
}

?5.2?看源码中的example——没看出来名堂

exe在mgltask中,放运行库dll的位置。
mgl_example.exe中放入libpng.dll和zlib.dll?
运行mgl_example,命令行输出如下图所示,不知道到底在执行哪些test。

二、其它出现的问题

2.1 动态库、静态库、Release、Debug

?2.2 error LNK2038: 检测到“RuntimeLibrary”的不匹配项的解决办法

error LNK2038: 检测到“RuntimeLibrary”的不匹配项的解决办法_阳光柠檬_的技术笔记-CSDN博客_lnk2038

? ? 动态库和静态库是不能同时使用的。必须一致!!!!!!!!!

三、MathGL库的使用

? 3.1 数据类型mglData认识

?3.1.1?MathGL的数据结构 Data constructor(来自MathGL doc)

mglData

  1. ?mglData数据结构:支持float、double、int、char等类型的一维数组、二维数组。支持三种类型的vector。
  2. 数据存在实数矩阵a中,做

?

?

?

  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2022-03-17 22:24:24  更:2022-03-17 22:24:42 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 7:46:40-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码