Incluir archivos de cabecera

Iniciado por SrCooper, 15 Junio 2013, 22:57 PM

0 Miembros y 1 Visitante están viendo este tema.

SrCooper

He creado una serie de archivos de cabecera para mis proyectos en c++ y hasta ahora si queria incluirlos en mi codigo debia teclear:
Código (cpp) [Seleccionar]
#include "nombre.h"
e incluir los archivos en la carpeta de mi proyecto. Pero resulta engorroso tener que copiar y compilar siempre los archivos cada vez asi que me gustaria saber donde tengo que copiar los archivos de cabecera para poder escribirlo asi:
Código (cpp) [Seleccionar]
#include <nombre.h>
y no tener que copiar siempre los archivos. Es decir, me gustaria convertir mi cabecera en una libreria normal.
He buscado informacion en google y en el foro pero no he encontrado nada que solucione mi problema. Uso linux, el compilador gcc y emacs.
Un saludo y gracias por adelantado.

amchacon

#1


Deberías estar trabajando en la teoría de cuerdas y no programando. Eso es cosa de ingenieros  ;-)

Cuando tu escribes <>, el compilador busca en la carpeta "include". Está dentro de la carpeta del compilador.

También puedes decirle al compilador que añada a su base de datos un determinado directorio.. En Codeblocks puedes configurarlo para que lo haga en todos los proyectos (o te haces una plantilla específica). Seguramente (casi 100%) emacs también lo permita (es algo bastante básico).
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

0xDani

En Linux, el compilador buscará en una serie de directorios estandarizados, entre ellos:

  • /usr/include
  • /usr/local/include

    Pon tu cabecera ahí. Si además has creado una librería estática o dinámica puedes ponerla en:

  • /usr/lib
  • /usr/local/lib

    y enlazar con ella con la opción "-l" de gcc.

    PD: Necesitarás privilegios para escribir en esos directorios.
I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM

SrCooper

Cita de: amchacon en 15 Junio 2013, 23:27 PM
Deberías estar trabajando en la teoría de cuerdas y no programando. Eso es cosa de ingenieros  ;-)

En realidad es una duda para Howard. Evidentemente yo ya lo se  :P

Ahora en serio, copie los archivos de cabecera a la carpeta /usr/include pero me sigue dando error al compilar.

Cita de: amchacon en 15 Junio 2013, 23:27 PM
En Codeblocks puedes configurarlo para que lo haga en todos los proyectos (o te haces una plantilla específica).Seguramente (casi 100%) emacs también lo permita (es algo bastante básico).

Si seguramente sí pero no es eso lo que me interesa. Estuve probando a copiar la cabecera en distintos directorios pero de verdad que no encuentro que hacer. Alomejor estoy compilando mal o algo asi (aun soy bastante inexperto).
Un saludo

PD: Si al final no encuentro solucion pues crearé una plantilla y ya está.

0xDani

Qué errores te da? Porque así a ciegas es difícil ayudarte.
I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM

pacoperico

Prueba una cosa busca los archivos de cabecera de la libreria estandar, mira a ver en que carpeta tienes alojados los stdio.h, string.h, stdlib.h, math.h etc etc. Y ahi sera donde debas poner tus bibliotecas personales.

0xDani

Cita de: pacoperico en 16 Junio 2013, 14:53 PM
Prueba una cosa busca los archivos de cabecera de la libreria estandar, mira a ver en que carpeta tienes alojados los stdio.h, string.h, stdlib.h, math.h etc etc. Y ahi sera donde debas poner tus bibliotecas personales.

Ese directorio suele ser /usr/include, tal como he dicho más arriba. Sería bastante raro que en su ordenador fuese otro directorio.
I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM

pacoperico

Asi es pero como el compañero ya ha puesto sus archivos *.h en ese directorio y sigue sin poder incluirlos en su codigo, lo unico que se me ocurre es que la carpeta include del compilador este en otro sitio o tenga otro nombre por la razon que sea.

SrCooper

#8

g++ -o main main.cpp
/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../x86_64-linux-gnu/crt1.o: In function `_start':
(.text+0x20): undefined reference to `main'
/tmp/cclBSM8A.o: In function `_main_()':
main.cpp:(.text+0x14): undefined reference to `miniwin::vredimensiona(int, int)'
main.cpp:(.text+0x39): undefined reference to `miniwin::rectangulo(float, float, float, float)'
main.cpp:(.text+0x76): undefined reference to `miniwin::texto(float, float, std::string const&)'
main.cpp:(.text+0x93): undefined reference to `miniwin::refresca()'
collect2: error: ld returned 1 exit status


Esto son los errores que da cuando intento compilar el archivo main.cpp, en el que se llaman a diferentes funciones citadas en los archivos de cabecera. Al parecer no reconoce estas funciones.
He copiado las cabeceras en el /usr/include y en la carpeta del compilador y en el codigo escribi #include <cabecera.h>. La verdad es que no se si estoy haciendo algo mal soy bastante novato programando. Alomejor estoy teniendo algun fallo tonto.

Si sirve de ayuda los archivos de cabecera en este caso son parte de un conjunto de funciones llamadas MiniWin creadas por Pau Fernández para el dibujo de diversas imagenes en consola.
Un saludo

0xDani

Vale, los errores son en tiempo de enlazado, lo que significa que el compilador encuentra las cabeceras. La pregunta es: hay archivos de implementación, aparte de las cabeceras? o librerías estáticas o dinámicas?

Porque lo que no encuentra el compilador es la definición de esas funciones.
I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM