2017-04-09 54 views
0

我对C++很陌生(曾经是一个Java开发人员,这很容易......),我必须编写一个应用程序,它必须绘制一些图表和图表。为此,我想使用MathGL库。我了解到,我必须自己编译才能使用它。所以这就是我最近几天想要做的...在窗口上构建mathgl

我在MinGW和CLion IDE上使用W​​indows。 我首先将MathGL的源代码提取到一个文件夹中,然后用CLion打开文件夹。 然后我下载了zlib和libpng的源代码,并将MathGL项目中的INCLUDE_DIR变量设置为相应的文件夹,将PNG_PNG_LIBRARY设置为png32。当我尝试通过克利翁编译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的源代码的脚本目录复制预建pnglibconf.h来修复第一个错误。之后,MinGW头部rpcndr.h中的字节定义似乎干扰oPRCFile.cc中的byte(double)方法,我刚刚通过将方法重命名为byteN并从宏调用它(#define byte(c) byteN(c))来修复该方法。虽然这可能不是正确的路,但它是有效的。

但是,所有固定链接器似乎配置错​​误:它说cannot find -lpng32。我该如何解决这个问题?

编辑:好的,它的编译。所以我复制libmgl.a并将其放入我想用它的项目中。我链接的是它的cmake调用target_link_libraries(Test ${CMAKE_SOURCE_DIR}/libmgl.a)但它只是抛出一堆undefined reference to错误的(相同的,如果我使用procompiled二进制文件):

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' 
[...] 

回答

0

看起来运行的libpng一个配置后,生成缺少的头文件(在Windows下你可能无法做,需要自己生成 - >Cannot open include file: 'pnglibconf.h':No such file or directory

但是除此之外,你是怎么觉得你需要从头开始构建它才能使用它的?您也可以下载预编译的二进制文件并将它们与您的程序链接(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

+0

诚然,作为一种学习体验,它不坏,但取决于你打算使用的库,如果你依赖预编译的二进制文件,特别是在Windows上,通常在*上使用的库,可能会更容易(并节省时间)尼克斯系统。 – user2047610

+0

那么,我会再试一次(因为预编译的二进制文件确实包含,我需要) - 编辑:我做了,它不起作用。我把所有的东西放在我的MinGW文件夹中,使用'target_link_libraries(Test libmgl.a)'链接我的.exe文件,它只是抛出一堆未定义的引用错误。 – aquaatic