2011-02-13 1 views
9

Sono unsucessful cercare di compilare freetype con MinGW/MSYSQualcuno ha compilato con successo freetype con MinGW/MSYS?

Ecco quello che faccio:

Da cmd.exe posso passare a MSYS:

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

e quindi chiamare la configure sceneggiatura

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

Dopo aver configurato freetype, voglio usare make per compilare i sorgenti:

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. 

Il problema sembra essere cygpath, che è strano, perché non ho installato Cygwin.

Dato che il mandato istruzioni di compilazione GNU Make, ho verificato questo:

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 

Che cosa ho fatto di sbagliato?

Modifica: C'è anche Makefile.mingw nella directory. Il tentativo di avviare il processo di compilazione con make -f Makefile.mingw non ha ancora esito positivo, restituendo il messaggio ¨make: *** No rule to make target 'MFSED', needed by 'all'. Stop..

aggiornamento Ok, ho fatto alcune indagini detective la questione, e sembra che il problema è precisly perché non ho installato Cygwin. Ho questa supposizione perché cygpath è un'utilità CygWin (See here) che converte i percorsi unix in percorsi Windows e viceversa.

Ora, un ¨find . -type f -exec grep -l cygpath {} \; trovano diverse sedi in cui è usato 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/build s/unix/unix-def.mk
  • ./patches/freetype-2.3.5.diff

e penso che avrei dovuto cambiare qualcosa in uno o più di questi luoghi per risolvere la build . Destra? Sto ancora sperando che qualcuno con più conoscenze sull'intero processo ./configure-build possa darmi un suggerimento sul problema.

Aggiornamento II: Da risposta di rubenvb, ho pensato che avrei potuto provare ./configure --build=i686-pc-mingw32 e quindi rimuovere la linea di lettura

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

in builds/unix/unix-def.mk e poi cambiamento della linea di lettura

RCTOOL_COMPILE = RCTOOL 

a

RCTOOL_COMPILE = $(RCTOOL) 

in ./builds/freetype.mk e anche copiando http://gnuwin32.sourceforge.net/rctool.sh.txt-c:\mingw\bin (dato che c'erano strani errori a causa della mancanza rctool.sh) e poi avviare il processo di compilazione con make.

Ora, la compilazione dei file di origine sembrava (almeno in parte) completa, finalmente, anche se ho avuto molti avvertimenti come

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

Ma il linker non è in grado di collegare il * .o file perché ci sono molti riferimenti non definiti come

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' 

credo che la fase di compilazione avvertimenti non sono indipendenti agli errori del linker.

Quindi, che ora?

risposta

4

In generale, la compilazione di software/Linux UNIX su Windows può andare in due modi:

  1. Utilizzare gli script di configurazione esistenti da MSYS o Cygwin.

  2. Utilizzare un makefile mingw fornito da cmd.exe (la shell di Windows).

Si è tentato il primo (ma non credo abbastanza duro), e ha fatto il secondo sbagliato:

  1. Prova a passare --host=i686-pc-mingw32 da configurare. La sceneggiatura ti sta dicendo che rileva una build unix, che è orribilmente sbagliata e, come puoi vedere, non funziona.

  2. È inoltre possibile utilizzare mingw32-make direttamente da cmd.exe per utilizzare il file makefile.mingw trovato. Dovrebbe funzionare bene.

Cercare di individuare un file README o INSTALL nella directory di origine principale. Dovrebbe dirti cosa fare e probabilmente ha una sezione specifica per Windows.

+0

Grazie per il prezioso aiuto. Sfortunatamente, nessuna delle due opzioni è cambiata, entrambe producono ancora lo stesso errore relativo al 'cygpath' mancante. Ho trovato un README (in realtà chiamato * INSTALL.UNIX * e * UPGRADE.UNIX *, entrambi dichiarati esplicitamente per l'utilizzo con MinGW/MSYS) e mi dice di fare sostanzialmente ciò che ho già fatto.Non sostengo che non ci ho provato abbastanza duramente (anche se ho passato già 4-5 ore), ma non è il punto dell'intera cosa ./configure che non deve preoccuparsi di diverse piattaforme? –

+1

Bene, cygpath non dovrebbe essere necessario in un ambiente msys. Sei sicuro che usare il makefile di mingw dalla console di windows (cmd.exe) usando mingw32-make non funzioni? – rubenvb

+0

Quando apro un cmd.exe e cd in 'C: \ temp \ freetype-2.3.5-1 \ src \ freetype \ 2.3.5 \ freetype-2.3.5' e faccio un' mingw32-make.exe -f Makefile.mingw', dopo aver stampato un sacco di righe, stampa finalmente 'mingw32-make: *** Nessuna regola per rendere il target' MFSED ', necessario per 'all'. Stop. –

Problemi correlati