Кто-нибудь успешно скомпилировал freetype с MinGW/MSYS?

Я безуспешно пытаюсь скомпилировать freetype с MinGW/MSYS

Вот что я делаю:

От cmd.exe Я переключаюсь на MSYS:

C:\temp\freetype-2.3.5-1\src\freetype\2.3.5\freetype-2.3.5>bash

А потом позвони configure скрипт

bash-3.1$ ./configure

FreeType build system -- automatic system detection

The following settings are used:

  platform                    unix
  compiler                    cc
  configuration directory     ./builds/unix
  configuration rules         ./builds/unix/unix.mk

If this does not correspond to your system or settings please remove the file
`config.mk' from this directory then read the INSTALL file for help.

Otherwise, simply type `make' again to build the library,
or `make refdoc' to build the API reference (the latter needs python).

cd builds/unix; ./configure
checking build system type... i686-pc-mingw32

[------ Deleted some 121 lines because they seem irrelevant for the problem ------]

config.status: creating ftconfig.h
make: Nothing to be done for `unix'.

После настройки freetype я хочу использовать make для компиляции источников:

bash-3.1$ make
/bin/sh: cygpath: command not found
config.mk:36: /builds/freetype.mk: No such file or directory
config.mk:57: /builds/unix/install.mk: No such file or directory
builds/toplevel.mk:158: /builds/modules.mk: No such file or directory
make: *** No rule to make target `/builds/modules.mk'.  Stop.

Кажется, проблема в cygpath, что странно, потому что я не установил cygwin.

Поскольку мандат инструкции по компиляции GNU make, я проверил это:

bash-3.1$ make -v
GNU Make 3.81
Copyright (C) 2006  Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.

This program built for i686-pc-msys

Что я делаю не так?

Редактировать: есть также Makefile.mingw в каталоге. Попытка начать процесс компиляции с make -f Makefile.mingw не заканчивается, возвращая сообщение ¨make: *** No rule to make target 'MFSED', needed by 'all'. Stop.,

Обновление Хорошо, я провел детективное расследование по этому вопросу, и похоже, что проблема именно в том, что я не установил CygWin. У меня есть это предположение, потому что cygpath утилита CygWin ( см. здесь), которая конвертирует unix-пути в windows-пути и наоборот.

Теперь ¨find . -type f -exec grep -l cygpath {} \; находит несколько мест, где cygpath используется:

  • ./builds/unix/aclocal.m4
  • ./builds/unix/configure
  • ./builds/unix/unix-def.in
  • ./builds/unix/unix-def.mk
  • ./patches/freetype-2.3.4.diff
  • ./patches/freetype-2.3.5/builds/unix/unix-def.mk
  • ./patches/freetype-2.3.5.diff

и я думаю, что мне нужно что-то изменить в одном или нескольких из этих мест, чтобы исправить сборку. Правильно? Я все еще надеюсь, что кто-то с большим знанием всего процесса./configure-build может дать мне подсказку по этому вопросу.

Обновление II: из ответа Рубена я решил, что могу попробовать ./configure --build=i686-pc-mingw32 а затем удалите строку чтения

TOP_DIR := $(shell cd $(TOP_DIR); cygpath -m `pwd`)

в builds/unix/unix-def.mk а затем измените чтение строки

RCTOOL_COMPILE = RCTOOL

в

RCTOOL_COMPILE = $(RCTOOL)

в ./builds/freetype.mk а также копирование http://gnuwin32.sourceforge.net/rctool.sh.txt в c:\mingw\bin (так как были странные ошибки из-за отсутствия rctool.sh), а затем начните процесс компиляции с make,

Теперь, кажется, что компиляция исходных файлов (по крайней мере, частично) завершена, хотя я получил много предупреждений, таких как

./src/base/ftcalc.c:75:3: warning: 'FT_RoundFix' redeclared without dllimport attribute: previous dllimport ignored

Но компоновщик не может связать файлы *.o, потому что есть много неопределенных ссылок, таких как

C:\temp\freetype-2.3.5-1\src\freetype\2.3.5\freetype-2.3.5/src/base/ftinit.c:89: undefined reference to `_imp__FT_Add_Module'

Я предполагаю, что предупреждения компиляции не связаны с ошибками компоновщика.

И что теперь?

1 ответ

Решение

В общем, компиляция программного обеспечения Unix/ Linux в Windows может идти двумя путями:

  1. Используйте существующие скрипты конфигурирования от MSYS или Cygwin.

  2. Используйте прилагаемый make-файл mingw из cmd.exe (оболочка Windows).

Вы попробовали первое (но я думаю, что не достаточно сильно), а второе сделали неправильно:

  1. Попробуйте пройти --host=i686-pc-mingw32 настроить. Скрипт говорит вам, что обнаруживает сборку Unix, которая ужасно неправильна и, как вы можете видеть, не работает.

  2. Вы также можете использовать mingw32-make прямо из cmd.exe использовать найденный вами makefile.mingw. Это должно работать нормально.

Попробуйте найти файл README или INSTALL в главном каталоге с исходным кодом. Он должен сказать вам, что делать, и, вероятно, имеет специальный раздел для Windows.

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