Строительство mathgl на окнах

Я новичок в C++ (раньше был Java-разработчиком, где это намного проще...), и мне нужно написать приложение, которое должно составлять некоторые графики и диаграммы. Для этого я хочу использовать библиотеку MathGL. И я узнал, что я должен скомпилировать это сам, чтобы использовать это. Вот что я пытаюсь сделать последние несколько дней...

Я использую Windows с MinGW и CLion IDE. Я начал с извлечения исходного кода MathGL в папку и открытия папки с помощью CLion. Затем я загрузил исходные коды zlib и libpng и установил переменные INCLUDE_DIR в проекте MathGL в соответствующие папки, а PNG_PNG_LIBRARY - в png32. Когда я пытаюсь скомпилировать mgl_example через CLion, он выдает следующую ошибку:

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

РЕДАКТИРОВАТЬ: мне удалось исправить эту первую ошибку, скопировав предварительно собранные pnglibconf.h из каталога скриптов исходного кода libpng. После этого определение байта в заголовке MinGW rpcndr.h кажется, мешает byte(double) метод в oPRCFile.cc, который я только что исправил, переименовав метод в byteN и вызывая его из макроса (#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'
[...]

1 ответ

Решение

Похоже, что отсутствующий заголовочный файл генерируется после запуска configure для libpng (что в Windows вы, возможно, не можете сделать и вам нужно сгенерировать -> Невозможно открыть включаемый файл: 'pnglibconf.h': такого файла или каталога нет)

Но кроме того, как у вас сложилось впечатление, что вам нужно построить его с нуля, чтобы использовать его? Вы также можете скачать скомпилированные двоичные файлы и связать их с вашей программой ( http://mathgl.sourceforge.net/doc_en/Installation.html - пункт 2).

edit: глядя на ваши правки, вам нужно указать фактический файл библиотеки в Windows (вероятно, что-то вроде png32.a или что-то еще, сгенерированное вашей компиляцией libpng), предполагая, что компоновщик также имеет путь к файлу библиотеки (см. http://www.mingw.org/wiki/specify_the_libraries_for_the_linker_to_use)

Другие вопросы по тегам