2011-05-02 51 views
16

C++ GUI Tutorial: undefined reference to TextOut¿Cómo puedo enlazar a una biblioteca con Code :: Blocks?

Tengo el mismo problema, pero soy nuevo en programación y Code :: Blocks, y quiero usar la biblioteca GDI32. ¿Cómo puedo instalarlo? Estoy muy confundido porque puedo usar el encabezado windows.h, pero algunas funciones como TextOut no están disponibles.

+1

1 Para la búsqueda de una respuesta existente. ¿Qué tipo de proyecto seleccionó cuando creó su proyecto CB? –

Respuesta

40

La biblioteca gdi32 ya está instalada en su computadora, pocos programas se ejecutarán sin ella. Su compilador (si está instalado correctamente) normalmente viene con una biblioteca de importación, que es lo que utiliza el vinculador para hacer un enlace entre su programa y el archivo en el sistema. (En el caso improbable de que el compilador no viene con bibliotecas de importación para las bibliotecas del sistema, tendrá que descargar el SDK de la plataforma Microsoft Windows.)

Para vincular con gdi32:

enter image description here

Este funcionará de manera confiable con MinGW-gcc para todas las bibliotecas del sistema (debería funcionar si usa otro compilador también, pero no puedo hablar de cosas que no he intentado). También puede escribir el nombre completo de la biblioteca, pero escribir libgdi32.a no tiene ninguna ventaja sobre gdi32 que no sea más trabajo de tipo.
Si no funciona no por alguna razón, es posible que deba proporcionar un nombre diferente (por ejemplo, la biblioteca se llama gdi32.lib para MSVC).

Para bibliotecas en algunas ubicaciones impares o subcarpetas de proyecto, deberá proporcionar un nombre de ruta correcto (haga clic en el botón "..." para un cuadro de diálogo de selección de archivo).

+2

Buena respuesta +1 para las imágenes :) –

+0

BTW, OP debe cambiar la configuración del enlazador para todo el proyecto en lugar de un solo objetivo. Esto se puede hacer haciendo clic en el nombre del proyecto dentro de la ventana 'Project build options' (' My Project' en la captura de pantalla). – HolyBlackCat

+0

Hola, estaba teniendo un problema para vincular SDL y SDL_image, gracias este ejemplo me ayudó mucho. Por ejemplo, en algunos ejemplos he visto el mensaje para vincularlo como "-lSDL" y "-lSDL_image", pero eso está bien. para la línea de comando. CodeBlocks agrega el "-l" para que solo agregue el nombre de la biblioteca, como lo hizo con GDI32. Deberían explicar esto ya que hay muchos nobos y se confunden.(Yo era uno) gracias – HoNgOuRu

0

Supongo que utilizó Code :: Blocks para crear un proyecto de aplicación de consola . Tal proyecto no se vincula con el material de GDI, porque las aplicaciones de consola generalmente no están destinadas a hacer gráficos, y TextOut es una función de gráficos. Si desea utilizar las funciones de GDI, debe crear un Win32 Gui Project, que se configurará para vincularlo en el GDI por usted.

+0

No creo que esto sea cierto. Estoy usando opengl (creación de ventanas win32) con una aplicación de consola y todavía funciona. –

-2

Para recapitular el proceso necesario para utilizar una biblioteca: Una vez por biblioteca:

1) Adquirir la biblioteca. Descargue desde el sitio web o a través de un administrador de paquetes .

2) Instale la biblioteca. Descomprímalo en un directorio o instálelo a través de un administrador de paquetes .

3) Indique al compilador dónde buscar para los archivos de cabecera (s) de la biblioteca .

4) Indique al vinculador dónde buscar para los archivos de biblioteca para la biblioteca .

vez por proyecto:

5) Dile al enlazador que los archivos estáticos o biblioteca de importación para vincular. 6) #include los archivos de encabezado de la biblioteca en su programa. 7) Asegúrese de que el programa sepa dónde encontrar cualquier biblioteca dinámica que se esté utilizando.

los pasos 1 y 2 - Adquirir y instalar la biblioteca Descargar e instalar la biblioteca en el disco duro. Consulte el tutorial en las bibliotecas estáticas y dinámicas para obtener más información acerca de este paso . Pasos 3 y 4 - Dile al compilador dónde encontrar los encabezados y archivos de la biblioteca vamos a hacer esto sobre una base global por lo que la biblioteca estará a disposición de todos nuestros proyectos. En consecuencia, los siguientes pasos solo deben realizarse una vez por cada biblioteca . A) Vaya al "Menú de configuración" y seleccione "Compilador". B) Haga clic en la pestaña "Directorios". La pestaña del compilador ya será seleccionada para usted. C) Presione el botón "Agregar" y agregue la ruta a los archivos .h para la biblioteca . Si está ejecutando Linux e instaló la biblioteca a través de un administrador de paquetes , asegúrese de que/ usr/include aparezca en la lista aquí. D) Haga clic en la pestaña "Enlazador". Presione el botón "Agregar" de y agregue la ruta a los archivos .lib de la biblioteca. Si está ejecutando Linux y instaló la biblioteca a través de un administrador de paquete , asegúrese de que/usr/lib es que se enumeran aquí. E) Presione el botón "OK". Paso 5: indique al vinculador qué bibliotecas está usando su programa Para el paso 5, necesitamos agregar los archivos de la biblioteca de la biblioteca al proyecto . Hacemos esto en una base de proyecto individual . A) Haga clic con el botón derecho en el nombre del proyecto en negrita en el espacio de trabajo predeterminado (probablemente la "Consola aplicación", a menos que haya cambiado ). Elija "Opciones de compilación" en el menú . B) Haga clic en la pestaña enlazador. En la ventana "Vincular bibliotecas", presione el botón "Agregar" y agregue la biblioteca que desea que su proyecto use en . C) Pulse el botón “OK”

Pasos 6 y 7 - cabecera #include archivos y asegurarse de proyecto pueden encontrar DLL Simplemente # include el archivo de cabecera (s) de la biblioteca en su proyecto.

Fuente: http://www.learncpp.com/cpp-tutorial/a3-using-libraries-with-codeblocks/

+2

Ok, gracias, pero ahora tenemos un problema diferente, a saber, el plagio. No está citando su fuente (http://www.learncpp.com/cpp-tutorial/a3-using-libraries-with-codeblocks/), y ha copiado/pegado todo al pie de la letra. ¿Eres el autor de ese artículo? ¿Puede publicar este artículo bajo la licencia CC-by-SA que utiliza Stack Exchange? – Mat

Cuestiones relacionadas