LINUX.ORG.RU

FreeType2 и mingw32: как получить библиотеку, с которой можно собрать проект для Windows

 


0

1

Всем добрый вечер! Собственно вопрос в заголовке. Конкрентно интересует для версии FreeType 2.11.1.

Готовую библиотеку что-то навскидку найти не удалось.

Пробовал собирать на месте. Обычную для Linux и g++ без проблем. А для mingw32

В файле INSTALL.GNU говориться заменить config.mk на w32-mingw32.mk из freetype-2.11.1/builds/windows/ Но это ничего не дает:

make CC="x86_64-w64-mingw32-c++"
Вывод:
make: type: Command not found
make: *** No rule to make target '.\src\tools\apinames.c', needed by '.\objs\apinames.exe'.  Stop.

PS Т.е. я правильно понимаю что для того чтобы получить библиотеку (которую можно будет кинуть в /usr/x86_64-w64-mingw32/lib/ и далее использовать для др. проектов для Windows) необходимо собрать исходники FreeType компилятором mingw32?


собирать для windows на windows религия не позволяет ? тем-же самым mingw и с pacman-пакетами из msys2.

хотя там вроде как актуальна более новая 2.13..https://packages.msys2.org/base/mingw-w64-freetype

PS/ можно по идее «качнуть» готовые пакеты из msys2 и покласть в свой тулчайн. Только это изврат

MKuznetsov ★★★★★
()
Ответ на: комментарий от MKuznetsov

Спасибо за ответ. Но на моей машине нет Windows. Плюс я еще хочу научиться собирать именно кросскомпилятором, на будущее. Так сказать, иметь потом проторенную дорожку.

Gyros
() автор топика
Ответ на: комментарий от Gyros

Спасибо за ответ. Но на моей машине нет Windows. Плюс я еще хочу научиться собирать именно кросскомпилятором, на будущее. Так сказать, иметь потом проторенную дорожку.

кстати, ругань make

make: type: Command not found

говорит вовсе не о проблема с freetype или с компилятором :-)

MKuznetsov ★★★★★
()
Последнее исправление: MKuznetsov (всего исправлений: 1)
Ответ на: комментарий от Gyros

Linux MinGW нужен также, как Wine для Windows.

https://en.wikipedia.org/wiki/MinGW

MinGW ("Minimalist GNU for Windows"), formerly mingw32, is a free 
and open source software development environment to create Microsoft Windows applications.

Forum0888
()
Последнее исправление: Forum0888 (всего исправлений: 5)
Ответ на: комментарий от Forum0888

Forum0888 писал

Linux MinGW нужен также, как Wine для Windows.

Извините, но я вас не понял.

Короче, скачал по ссылке https://packages.msys2.org/base/mingw-w64-freetype архив

mingw-w64-x86_64-freetype-2.13.0-1-any.pkg.tar.zst
раскаковал, раскидал необходимые include и библиотеки libfreetype.dll.a libfreetype.a в /usr/x86_64-w64-mingw32/ Собираю с ключами линкера -lfreetype.dll -lfreetype, собирается без проблем. Получаю exe-шник. Запускаю:
wine text_rendering.exe
007c:fixme:hid:handle_IRP_MN_QUERY_ID Unhandled type 00000005
007c:fixme:hid:handle_IRP_MN_QUERY_ID Unhandled type 00000005
007c:fixme:hid:handle_IRP_MN_QUERY_ID Unhandled type 00000005
007c:fixme:hid:handle_IRP_MN_QUERY_ID Unhandled type 00000005
0108:err:module:import_dll Library libwinpthread-1.dll (which is needed by L"Z:\\home\\bark\\Works\\TextRendering\\libgcc_s_seh-1.dll") not found
0108:err:module:import_dll Library libgcc_s_seh-1.dll (which is needed by L"Z:\\home\\bark\\Works\\TextRendering\\libharfbuzz-0.dll") not found
0108:err:module:import_dll Library libwinpthread-1.dll (which is needed by L"Z:\\home\\bark\\Works\\TextRendering\\libgcc_s_seh-1.dll") not found
0108:err:module:import_dll Library libgcc_s_seh-1.dll (which is needed by L"Z:\\home\\bark\\Works\\TextRendering\\libstdc++-6.dll") not found
0108:err:module:import_dll Library libwinpthread-1.dll (which is needed by L"Z:\\home\\bark\\Works\\TextRendering\\libstdc++-6.dll") not found
0108:err:module:import_dll Library libstdc++-6.dll (which is needed by L"Z:\\home\\bark\\Works\\TextRendering\\libharfbuzz-0.dll") not found
0108:err:module:import_dll Library libglib-2.0-0.dll (which is needed by L"Z:\\home\\bark\\Works\\TextRendering\\libharfbuzz-0.dll") not found
0108:err:module:import_dll Library libgraphite2.dll (which is needed by L"Z:\\home\\bark\\Works\\TextRendering\\libharfbuzz-0.dll") not found
0108:err:module:import_dll Library libintl-8.dll (which is needed by L"Z:\\home\\bark\\Works\\TextRendering\\libharfbuzz-0.dll") not found
0108:err:module:import_dll Library libharfbuzz-0.dll (which is needed by L"Z:\\home\\bark\\Works\\TextRendering\\libfreetype-6.dll") not found
0108:err:module:import_dll Library libfreetype-6.dll (which is needed by L"Z:\\home\\bark\\Works\\TextRendering\\text_rendering.exe") not found
0108:err:module:LdrInitializeThunk Importing dlls for L"Z:\\home\\bark\\Works\\TextRendering\\text_rendering.exe" failed, status c0000135

Хотя библиотека libfreetype-6.dll лежит рядом с exe-шником. Не знаете в чем проблема? Или dll-ки должны еще в /home/bark/.wine/drive_c/windows/syswow64/ лежать?

Gyros
() автор топика
Ответ на: комментарий от Gyros

На странице https://packages.msys2.org/package/mingw-w64-x86_64-freetype есть список зависимостей, их тоже надо скачать и установить.

Так же обрати внимание на файл mingw64/bin/libfreetype-6.dll – это именно то, что нужно приложению.

DrBrown
()
Последнее исправление: DrBrown (всего исправлений: 1)

Ранее вы сказали, что Windows у вас нет.
Понимаю так, что вам нужно в Linux собрать freetype для Windows.
Наверное это можно сделать, но не знаю как (может быть в wine?).

MinGW используется в Windows для того, чтобы собрать какой-то проект из Linux.

Берите https://download.savannah.gnu.org/releases/freetype/freetype-2.13.0.tar.xz (в нем нет никаких зависимостей) и собирайте в Wine для Windows.

Forum0888
()
Последнее исправление: Forum0888 (всего исправлений: 2)
Ответ на: комментарий от DrBrown

Я уже все зависимости скачал. Для приложения нужно только dll-ки. Include и lib-ы не надо ставить в папку компилятра mingw32, они не нужны для сборки. Само приложение и так линкуется с libfreetype.dll.a libfreetype.a

Все эти dll-ки лежат рядом с exe-шником (кроме libgraphite2.dll). Но exe их не видит. Не могу понять в чем причина.

Gyros
() автор топика
Ответ на: комментарий от Gyros

Для приложения нужно только dll-ки. Include и lib-ы не надо ставить в папку компилятра mingw32, они не нужны для сборки

ровно в точности до наоборот. Для компиляции и линковки ненужны DLL-ки. Нужны библиотеки *.a и инклуды *.h

непосредственно dll используются только при запуске приложения. В билд-системе они просто дань традиции. Для запуска дллки должны быть под ту-же архитектуру (32/64), собранные желательно таким-же компилятором (gcc/clang/msvc) и использовать туже C-библиотеку. (в виндовсе их сцуко ДВЕ !!). Для запуска потребуются ещё libgcc и libwinpthread

PS/ вам всё-таки стоит поставить win, научиться компилить, собирать и деплоить под ним; а потом уже кросс-компил..иначе фигня получается, вы незнаете целевую платформу

MKuznetsov ★★★★★
()
Последнее исправление: MKuznetsov (всего исправлений: 2)
Ответ на: комментарий от gag

Спасибо за MXE! Установил его. Пробую. Какие-то проблемы с линковкой, хотя библиотеку указываю явно: -lglfw3

~/Works/TextRendering$ make windows
x86_64-w64-mingw32.static-g++  -static-libgcc -static-libstdc++ shader.h glad.c text_rendering.cpp -I /home/bark/mxe/usr/x86_64-w64-mingw32.static/include/freetype2 -o text_rendering.exe \
 -lwinpthread  -lglfw3  -lopengl32  -lfreetype -lpng -Wl,--subsystem,windows
/home/bark/mxe/usr/bin/x86_64-w64-mingw32.static-ld: /home/bark/mxe/usr/lib/gcc/x86_64-w64-mingw32.static/11.3.0/../../../../x86_64-w64-mingw32.static/lib/../lib/libglfw3.a(win32_monitor.c.obj):win32_monitor.:(.text+0x10e): undefined reference to `__imp_CreateDCW'
/home/bark/mxe/usr/bin/x86_64-w64-mingw32.static-ld: /home/bark/mxe/usr/lib/gcc/x86_64-w64-mingw32.static/11.3.0/../../../../x86_64-w64-mingw32.static/lib/../lib/libglfw3.a(win32_monitor.c.obj):win32_monitor.:(.text+0x148): undefined reference to `__imp_GetDeviceCaps'
/home/bark/mxe/usr/bin/x86_64-w64-mingw32.static-ld: /home/bark/mxe/usr/lib/gcc/x86_64-w64-mingw32.static/11.3.0/../../../../x86_64-w64-mingw32.static/lib/../lib/libglfw3.a(win32_monitor.c.obj):win32_monitor.:(.text+0x1a0): undefined reference to `__imp_DeleteDC'
/home/bark/mxe/usr/bin/x86_64-w64-mingw32.static-ld: /home/bark/mxe/usr/lib/gcc/x86_64-w64-mingw32.static/11.3.0/../../../../x86_64-w64-mingw32.static/lib/../lib/libglfw3.a(win32_monitor.c.obj):win32_monitor.:(.text+0x303): undefined reference to `__imp_GetDeviceCaps'
...

Библиотеки находятся: /home/bark/mxe/usr/x86_64-w64-mingw32.static/lib/

Даже если явно с ключом _L указываю путь, то возникают те же ошибки линкера. Может кто-нибудь знает в чем причина?

Gyros
() автор топика
Ответ на: комментарий от DrBrown

Да, спасибо. Цель достигнута (УРА!) благодаря MXE. Хотя можно было бы без него, но тогда пришлось бы самому ставить необходимые библиотеки. А с помощью MXE нужные пакеты (библиотеки) ставятся одной командой:

make  brotli bzip2  freetype freetype-bootstrap glfw3 glib  harfbuzz  pthreads MXE_TARGETS='x86_64-w64-mingw32.static'
Итак, собираю командой
x86_64-w64-mingw32.static-g++  -static-libgcc -static-libstdc++ $(HEADERS) $(SOURCES) -I $(ADD_INCLUDE_FT_WIN) -o $(EXECUTABLE_WIN) \
	 -L/home/bark/mxe/usr/x86_64-w64-mingw32.static/lib -lwinpthread  -lglfw3  -lopengl32  -lfreetype -lpng -lpng16 -lharfbuzz -lbrotlicommon-static -lbrotlienc-static -lbrotlidec-static -lbrotlicommon.dll -lbz2 -lz -lharfbuzz -lwinmm -lgdi32 -Wl,--subsystem,windows 

PS1 exe-шник раздулся до 9 Мб (хотя делает только вывод простейшего текста), и требует для запуска только libbrotlicommon.dll и glfw3.dll

PS2 Все-таки библиотека freetype так много тянет вспомогательных библиотек. Лучше наверное использовать Dear ImGui. Там и вывод текста есть и вообще много элементов управления.

Gyros
() автор топика