Pregunta

Estoy compilando con MINGW en Windows 7, usando Código :: Bloques como IDE. Todo debe estar al día. Noté que hay una serie de preguntas similares, pero aquellas parecían estar acerca de la vinculación de una biblioteca dinámica, no compilando la biblioteca estática.

Estoy tratando de usar FTGL para poder usar texto en OpenGL. FTGL requiere instalarse Freetype 2. Descargué la fuente de Freetype, y seguí las instrucciones de install.gnu para construir la biblioteca estática de cmd.exe, utilizando MINGW32-make.exe.

Como las instrucciones indicadas, corrí a MingW32: hacer del directorio base de la instalación de FreeType. La salida de la consola fue como se esperaba:

D:\freetype-2.4.4>mingw32-make

FreeType build system -- automatic system detection

The following settings are used:

  platform                     win32
  compiler                     gcc
  configuration directory      .\builds\win32
  configuration rules          .\builds\win32\w32-gcc.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).

Could Not Find D:\freetype-2.4.4\objs\ftmodule.h
Generating modules list in ./objs/ftmodule.h...
"* module: truetype  (Windows/Mac font files with extension *.ttf or *.ttc)"
"* module: type1     (Postscript font files with extension *.pfa or *.pfb)"
"* module: cff       (OpenType fonts with extension *.otf)"
"* module: cid       (Postscript CID-keyed fonts, no known extension)"
"* module: pfr       (PFR/TrueDoc font files with extension *.pfr)"
"* module: type42    (Type 42 font files with no known extension)"
"* module: winfnt    (Windows bitmap fonts with extension *.fnt or *.fon)"
"* module: pcf       (pcf bitmap fonts)"
"* module: bdf       (bdf bitmap fonts)"
"* module: sfnt      (helper module for TrueType & OpenType formats)"
"* module: autofit   (automatic hinting module)"
"* module: pshinter  (Postscript hinter module)"
"* module: raster    (monochrome bitmap renderer)"
"* module: smooth    (anti-aliased bitmap renderer)"
"* module: smooth    (anti-aliased bitmap renderer for LCDs)"
"* module: smooth    (anti-aliased bitmap renderer for vertical LCDs)"
"* module: psaux     (Postscript Type 1 & Type 2 helper module)"
"* module: psnames   (Postscript & Unicode Glyph name handling)"
done.

VER A Tanto la plataforma como el compilador fueron correctos, corrí nuevamente el comando HACK:

D:\freetype-2.4.4>mingw32-make
(bunch of calls, building objects then linking them, until:)
ar: creating objs/freetype.a

Esto produjo el archivo Freetype.a en el directorio D: \ Freetype-2.4.4 \ objs.

Luego hice los pasos en Código :: Bloques para vincular la biblioteca al proyecto, agregó un bit de código de código para probar FTGL, y trató de construirlo.

Estoy teniendo dos errores, dependiendo de cómo intento hacer las cosas.

Si proporciono el directorio correcto en el enlazador (-LD: \ Freetype-2.4.4 \ objs), y enlace con -lfreetype, todo está bien hasta que LD.EXE se aplica con el error en el título, no se puede encontrar. lfreetype.

Si no proporciono el directorio correcto, obtengo el mismo error. No puedo encontrar la biblioteca.

Si cambio el nombre del archivo, FreeType.a, a libfreetype.a, y proporciono el directorio correcto, en cambio, obtengo varias referencias indefinidas.

obj\Release\CApp_OnRender.o:CApp_OnRender.cpp:(.text+0x250): undefined reference to `FTPixmapFont::FTPixmapFont(char const*)'
obj\Release\CApp_OnRender.o:CApp_OnRender.cpp:(.text+0x258): undefined reference to `FTFont::Error() const'
obj\Release\CApp_OnRender.o:CApp_OnRender.cpp:(.text+0x274): undefined reference to `FTFont::FaceSize(unsigned int, unsigned int)'
obj\Release\CApp_OnRender.o:CApp_OnRender.cpp:(.text+0x308): undefined reference to `FTFont::Render(char const*, int, FTPoint, FTPoint, int)'
obj\Release\CApp_OnRender.o:CApp_OnRender.cpp:(.text+0x316): undefined reference to `FTPixmapFont::~FTPixmapFont()'
obj\Release\CApp_OnRender.o:CApp_OnRender.cpp:(.text+0x328): undefined reference to `FTPixmapFont::~FTPixmapFont()'
collect2: ld returned 1 exit status

Si proporciono el directorio equivocado, nuevamente obtiene el error anterior que no pudo encontrar la biblioteca.

Me pareció extraño que la marca lo haría, cuando siguiera las instrucciones en el archivo de instalación, producir una biblioteca con un nombre que no comenzó con LIB. Revisé y todos los otros. Un archivo comenzó con lib-. Y parece que el enlazador está buscando el archivo libftreetype.a. Entonces, ¿por qué es la creación de Freetype.A en su lugar? Esto está utilizando el mismo compilador para la biblioteca que estoy usando para compilar el programa.

de todos modos, no estoy seguro de dónde ir desde aquí. Pensé en usar el Shell Msys que forma parte del paquete MINGW, pero no tengo mucha experiencia con ella y la instrucción en install.unix asume que conoce los comandos más obvios. Mencionan utilizando ./configure [Options], sin mención de qué opciones pueden ser aconsejables. Probablemente obvio para alguien con más conocimiento del sistema, pero Msys es mi primera experiencia con sh.

Apreciaría cualquier ayuda con este asunto.

¿Fue útil?

Solución

Mi versión de libfreetype.a (2.4.4, construido a partir de un paquete de Debian modificado) ¿No exporta los símbolos que su enlace está buscando (ftpixmapfont constructor), ni los encabezados declaran una clase de este tipo.Una búsqueda rápida de Google indica que pertenecen a FTGL.

Cambiar el nombre de su archivo de importación a libfreetype.a fue correcto (el MingW LD no lo encontrará de lo contrario), ¡pero también se vinculó con las bibliotecas FTGL necesarias?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top