如何在 Mac 上完全遵守和安装 mathGL?

How to completely complie and install mathGL on Mac?

提问人:Tippsie 提问时间:5/24/2022 最后编辑:francescalusTippsie 更新时间:5/24/2022 访问量:154

问:

请让我知道,如果无论如何我都可以让 MathGL 在我的计算机上工作。如果以下测试有任何错误,请告诉我。
谢谢。
好的,我已经为这个问题苦苦挣扎了很长时间。以下是当我尝试从 C/Fortran 代码可视化结果时发生的情况 基本信息为:

OS: Mac OSX 12.3.1
GCC/GFortran version: 11.3.0
clang version: 13.1.6

案例一:默认制作

cmake .
cmake .
make install

这看起来像是最小的安装。头文件安装到 /usr/local/include,库安装到 /usr/local/lib。 如果我运行

**[compile default]**
g++  src/testMathGL.cpp -o testMathGL -lmgl
**[testMathGL.cpp]**
#include "mgl2/mgl.h"
 
 int main() {
    mglGraph gr;
    gr.Title("MathGL Demo");
    gr.SetOrigin(0, 0);
    gr.SetRanges(0, 10, -2.5, 2.5);
    gr.FPlot("sin(1.7*2*pi*x) + sin(1.9*2*pi*x)", "r-2");
    gr.Axis();
    gr.Grid();
    gr.WriteFrame("mgl_example.svg");
}

我相信默认构建足以生成绘图。但是,绘图会生成并自动保存在磁盘上。如果我正在调试我的代码,这很不方便(可能会生成很多图,我不需要这些)。其中,我需要调整一些参数以获得有前途且物理上可实现的设置。因此,我希望在每次运行后直接生成并打开绘图。

案例二:

在这种情况下,我正在尝试运行以下代码

**[testMathGL-fltk]**
#include "mgl2/fltk.h"

int graph(mglGraph *gr) {
    gr->Title("MathGL Demo");
    gr->SetOrigin(0, 0);
    gr->SetRanges(0, 10, -2.5, 2.5);
    gr->FPlot("sin(1.7*2*pi*x) + sin(1.9*2*pi*x)", "r-4");
    gr->Axis();
    gr->Grid();
    return 0;
}

int main() {
    mglFLTK gr(graph, "MathGL demo window title");
    return gr.Run();
}

如果我尝试使用默认命令编译代码

**[compile default]**
g++  src/testMathGL.cpp -o testMathGL -lmgl (-lmgl-fltk)

错误很简单

'mgl2/fltk.h' file not found

当然,默认版本不包含任何图形库。为了包含这些库,我尝试了 MathGL 中的预构建库。我编译为

**[compile prebuilt]**
g++  src/testMathGL.cpp -o testMathGL -I/Users/somebody/Downloads/mathgl-8.0-mingw.win64/include/ -L/Users/somebody/Downloads/mathgl-8.0-mingw.win64/lib/-lmgl (-lmgl-fltk)

但是 g++ 一直给我这样的错误

unknown type name 'dllimport'

由于预构建的下载总是以 win64 为后缀,我认为对于类 Unix 系统,我需要自己编译它。 从 MathGL 的安装说明中,我被告知在配置 make 过程时必须启用一些键。另请参阅 http://mathgl.sourceforge.net/doc_en/Installation.html

cmake -D enable-all=on -D enable-all-widgets=on -D enable-all-swig=on . 

然后它给出了很多错误,说明缺少依赖项。我想到了其中的大多数,比如 Qt5、hdf5、glut、fltk、wxWidgets、swig、octave。 现在还有一些缺失的依赖项我不知道如何解决。如图所示

CMake Error at CMakeLists.txt:515 (message):
  HDF4_LIB-NOTFOUND


CMake Error at CMakeLists.txt:516 (message):
  HDF4MF_LIB-NOTFOUND


CMake Error at CMakeLists.txt:517 (message):
  HDF4_INCLUDE_DIR-NOTFOUND


CMake Error at CMakeLists.txt:518 (message):
  Couldn't find HDF4 libraries.


CMake Error at CMakeLists.txt:608 (message):
  Couldn't find libHaru or libhpdf.


CMake Error at CMakeLists.txt:612 (message):
  Couldn't find headers of 3d-enabled version of libhpdf.


-- Couldn't find Qt5 WebKitWidgets library. JSON sample disabled.
c-- /usr/local/bin/octave-config x86_64-apple-darwin21.3.0 api-v57
-- Configuring incomplete, errors occurred!
See also "/Users/somebody/Downloads/mathgl-8.0.1/CMakeFiles/CMakeOutput.log".
See also "/Users/somebody/Downloads/mathgl-8.0.1/CMakeFiles/CMakeError.log".

我想知道如何安装 hdf4?还是 HDF4 已经被 HDF5 取代?

C++ 生成文件 HDF MathGL

评论

0赞 MadScientist 5/24/2022
显然,您不能在MacOS上使用Windows库等,因此请将其完全删除。但我不明白为什么你认为你需要构建,只是为了获取头文件:你不是已经成功链接了吗?你说你安装了头文件,这是否意味着你有文件,如果是这样,是否足以添加到你的编译行中?/usr/local/include/usr/local/include/mgl2/mgl.h-I/usr/local/include
0赞 Mark Setchell 5/24/2022
我不知道或使用这个包,但似乎有一个端口......ports.macports.org/port/mathgl
0赞 Tippsie 5/24/2022
谢谢,MadScientist。是的,如果我只想生成一个绘图,我可以编译和运行我的代码。但是如果我需要立即在屏幕上看到绘图,则必须使用标头 fltk.h 进行编译并链接到库 libmgl-fltk.a(而不是 mgl.h 和 libmgl.a),这就是我使用 fltk 构建 MatGL 的原因。
0赞 Tippsie 5/24/2022
是的,端口似乎是一种解决方案。但是安装端口需要 Xcode。这是一个庞大的应用程序,我不愿意使用它。hdf4 和 hdf5 是独立的吗?还是 HDF5 已经提供了必要的兼容库?

答:

0赞 Tippsie 5/24/2022 #1

嗯,我现在有一个棘手的解决方案来满足我上面的要求。这是调用系统应用程序来显示当前绘图。

#include "mgl2/mgl.h"
#include <iostream>
 
 int main() {
    mglGraph gr;
    gr.Title("MathGL Demo");
    gr.SetOrigin(0, 0);
    gr.SetRanges(0, 10, -2.5, 2.5);
    gr.FPlot("sin(1.7*2*pi*x)", "r-2");
    gr.Axis();
    gr.Grid();
    gr.WriteFrame("mgl_example.svg");
    std::system("open mgl_example.svg -a Gapplin");
}

仍在寻找编译 MathGL 的解决方案...