#qt #visual_cpp #g++ #make #makefile
Очень нужна dll'ка получаемая при сборке одного из проектов (любого) в данном репозитории: http://sourceforge.net/p/zint/code/ci/master/tree/ В указанном репозитории, как я понял, несколько вариантов: для qt, VC++ и, я так полагаю, для C++ в GCC. Есть варианты создающие dll и варианты создающие десктопную программу использующую данную dll. Меня интересует именно dll... Вот только проблема в том, что я ни с чем вышеперечисленным ране не работал на уровне достаточном для того, чтобы уметь собрать проект из файлов представленных в репозитории. Проект для VC++ у меня в 15-ой студии "с наскока" не собрался, ругается на отсутствие: Не удается открыть файл включение: png.h. Которого в директории проекта не наблюдается. В идеале хотелось бы конечно получить рабочую dll'ку именно в VS. Но если не выйдет, то любой другой вариант так же приемлем. Qtшный проект так же ругается (не могу сказать на что именно, в поле вывода абракадабра какая-то...) Вопрос: Какую последовательность действий мне нужно совершить чтобы скомпилировать один из представленных в репозитории проектов создающий dll библиотеку. PS: Если кто-то сам скомпилит и кинет ссылку на zint.dll я конечно тоже буду признателен, но всё же хотелось бы знать как это делается.
Ответы
Ответ 1
Сборка zint с поддержкой PNG Сборку будем производить в некотором каталоге %BUILD_ROOT%. Везде в дальнейшем разделителем каталогов должна быть прямая дробная черта (/). При использовании обратной (\) возможны ошибки сборки. Для сборки в данном случае использовались CMake версии 3.3.2 и MinGW-builds версии 5.2.0rev0. Сборка библиотеки zlib (использовалась версия 1.2.8). Скачиваем архив исходников zlib и распаковываем его в каталог %BUILD_ROOT%/zlib. Далее собираем: cd /d %BUILD_ROOT% mkdir zlib-build cd zlib-build cmake -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=%BUILD_ROOT%/zlib-out ../zlib cmake --build . mingw32-make install После этого в каталоге %BUILD_ROOT%/zlib-out будет скомпилированная библиотека zlib. Сборка библиотеки libpng (использовалась версия 1.6.19). Скачиваем архив исходников libpng и распаковываем его в каталог %BUILD_ROOT%/libpng. Собираем: cd /d %BUILD_ROOT% mkdir libpng-build cd libpng-build cmake -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=%BUILD_ROOT%/libpng-out -DZLIB_LIBRARY=%BUILD_ROOT%/zlib-out/lib/libzlib.dll.a -DZLIB_INCLUDE_DIR=%BUILD_ROOT%/zlib-out/include ../libpng cmake --build . mingw32-make install Предупреждения CMake игнорируем. После этого в каталоге %BUILD_ROOT%/libpng-out будет скомпилированная библиотека libpng. Сборка библиотеки zint (использовалась версия 2.4.3). Скачиваем архив исходников zint и распаковываем его в каталог %BUILD_ROOT%/zint. Файл CMakeLists.txt то ли не подходит для новых версий CMake, то ли в нём изначально ошибка, но в любом случае при сборке возникает ошибка, связанная с невозможностью найти файл png.h. Для исправления ошибки нужно этот файл немного подредактировать, а именно, в 14-й строке заменить ${PNG_INCLUDES} на ${PNG_INCLUDE_DIRS}. Теперь можно собирать: cd /d %BUILD_ROOT% mkdir zint-build cd zint-build cmake -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=%BUILD_ROOT%/zint-out -DZLIB_LIBRARY=%BUILD_ROOT%/zlib-out/lib/libzlib.dll.a -DZLIB_INCLUDE_DIR=%BUILD_ROOT%/zlib-out/include -DPNG_LIBRARY=%BUILD_ROOT%/libpng-out/lib/libpng.dll.a -DPNG_PNG_INCLUDE_DIR=%BUILD_ROOT%/libpng-out/include ../zint cmake --build . mingw32-make install Предупреждения при сборке игнорируем. После выполнения всех шагов в каталоге %BUILD_ROOT%/zint-out будет требуемая библиотека libzint.dll. Сборка без зависимостей. Полученная libzint.dll имеет в зависимостях libpng16.dll, а та, в свою очередь, libzlib.dll. Кроме того, все эти библиотеки зависят от libgcc*.dll. Чтобы убрать все эти зависимости и сделать сборку (почти) полностью независимой, можно сделать следующее. Определяем две переменных: set CFLAGS=-static set CXXFLAGS=%CFLAGS% Эти переменные уберут зависимость библиотек от libgcc*.dll. Чтобы убрать зависимость libpng.dll от zlib.dll, исправим один параметр при запуске cmake: -DZLIB_LIBRARY=%BUILD_ROOT%/zlib-out/lib/libzlibstatic.a А чтобы убрать зависимость libzint.dll от libpng16.dll и libzlib.dll, нужно у cmake исправить два параметра: -DZLIB_LIBRARY=%BUILD_ROOT%/zlib-out/lib/libzlibstatic.a -DPNG_LIBRARY=%BUILD_ROOT%/libpng-out/lib/libpng.a Готово! Полученная библиотека зависит только от kernel32.dll и msvcrt.dll.
Комментариев нет:
Отправить комментарий