在 Windows 上构建 mathgl

Building mathgl on windows

提问人:aquaatic 提问时间:4/9/2017 最后编辑:aquaatic 更新时间:4/9/2017 访问量:918

问:

我是 C++ 的新手(曾经是 Java 开发人员,这更容易......),我必须编写一个应用程序,它必须绘制一些图形和图表。为此,我想使用 MathGL 库。我学会了,我必须自己编译它才能使用它。这就是我最近几天想做的事情......

我正在使用带有 MinGW 和 CLion IDE 的 Windows。 我首先将 MathGL 的源代码解压缩到一个文件夹中,然后使用 CLion 打开该文件夹。 然后我下载了 zlib 和 libpng 的源代码,并将 MathGL 项目中的 INCLUDE_DIR 变量设置为相应的文件夹,并将 PNG_PNG_LIBRARY 设置为 png32。当我尝试通过CLion编译mgl_example时,它给了我以下错误:

In file included from [...]\mathgl-2.3.5.1\src\data_png.cpp:22:0:
[...]/libpng-1.6.29/png.h:361:27: fatal error: pnglibconf.h: No such file or directory
compilation terminated.
mingw32-make.exe[2]: *** [src/CMakeFiles/mgl.dir/data_png.cpp.obj] Error 1
mingw32-make.exe[2]: *** Waiting for unfinished jobs....
src\CMakeFiles\mgl.dir\build.make:465: recipe for target 'src/CMakeFiles/mgl.dir/data_png.cpp.obj' failed
mingw32-make.exe[2]: Leaving directory '[..]/mathgl-2.3.5.1/cmake-build-debug'
mingw32-make.exe[1]: *** [src/CMakeFiles/mgl.dir/all] Error 2
mingw32-make.exe: *** [all] Error 2
CMakeFiles\Makefile2:89: recipe for target 'src/CMakeFiles/mgl.dir/all' failed
mingw32-make.exe[1]: Leaving directory '[...]/mathgl-2.3.5.1/cmake-build-debug'
Makefile:129: recipe for target 'all' failed

编辑:我设法通过从 libpng 源代码的脚本目录中复制预构建的来修复第一个错误。在那之后,MinGW 标头中字节的定义似乎干扰了 中的方法,我刚刚通过将方法重命名为并从宏 () 调用它来修复该方法。虽然这可能不是正确的方法,但它是有效的。pnglibconf.hrpcndr.hbyte(double)oPRCFile.ccbyteN#define byte(c) byteN(c)

但是,在修复了所有这些之后,链接器似乎配置错误:它说。我该如何解决这个问题?cannot find -lpng32

编辑:好的,它已经编译好了。所以我复制了libmgl.a,把它放到我想用的项目中。我通过调用与 cmake 链接它,但它只是抛出一堆错误(如果我使用预编译的二进制文件,则相同):target_link_libraries(Test ${CMAKE_SOURCE_DIR}/libmgl.a)undefined reference to

MakeFiles\Test.dir/objects.a(main.cpp.obj): In function `ZN8mglDataAC2Ev':
c:/mingw/include/mgl2/abstract.h:156: undefined reference to `_imp___ZTV8mglDataA'
CMakeFiles\Test.dir/objects.a(main.cpp.obj): In function `ZN8mglDataAD2Ev':
c:/mingw/include/mgl2/abstract.h:157: undefined reference to `_imp___ZTV8mglDataA'
[...]
C++ 数学

评论


答:

0赞 user2047610 4/9/2017 #1

看起来缺少的头文件是在运行 libpng 的配置后生成的(在 Windows 下,您可能无法这样做,需要自己生成 -> 无法打开包含文件:“pnglibconf.h”:没有这样的文件或目录)

但除此之外,你是如何得到需要从头开始构建它才能使用它的印象的?您还可以下载预编译的二进制文件并将它们与您的程序链接(http://mathgl.sourceforge.net/doc_en/Installation.html - 第 2 点)。

编辑:查看您的编辑,您需要在 Windows 中指定实际的库文件(可能是类似于 png32.a 或您的 libpng 编译生成的任何内容),假设链接器也具有库文件所在的路径(请参阅 http://www.mingw.org/wiki/specify_the_libraries_for_the_linker_to_use)

评论

0赞 aquaatic 4/9/2017
谢谢。我编辑了这篇文章。尽管可以使用预编译的二进制文件,但我仍然希望让它工作,因为它可能会在以后的某个时候有用。
0赞 user2047610 4/9/2017
没错,我想作为一种学习体验,它还不错,但根据你打算使用的库,如果你依赖预编译的二进制文件,特别是 Windows 上的库,它可能会更容易(和节省时间)通常用于 *nix 系统。
0赞 aquaatic 4/9/2017
好吧,我会再试一次(因为预编译的二进制文件实际上确实包括我需要的东西) - 编辑:我做到了,但它不起作用。我把所有东西都放在我的 MinGW 文件夹中,使用链接我的 .exe,它只是抛出一堆未定义的引用错误。target_link_libraries(Test libmgl.a)
0赞 user2047610 4/9/2017
在进行快速搜索后,似乎其他人在尝试与 MathGL 静态链接时也遇到了问题,也许现在尝试动态链接?(请指定 libmgl.dll.a,并在执行时在$PATH中保留必要的.dll文件)
0赞 aquaatic 4/9/2017
谢谢。我链接到 .dll.a 库并且它可以工作 - 有点:它缺少 dlls libgcc_s_dw2-1.dll、libstdc++-6.dll、libgomp-1.dll。无论哪种方式:我将您的答案标记为答案,因为我认为这与实际主题无关:S