🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: es.comp.os.linux.programacion
7 messages
7 total messages Started by Alias Wed, 12 Aug 2009 12:17
undefined reference to 'nombre función'
#373
Author: Alias
Date: Wed, 12 Aug 2009 12:17
112 lines
5933 bytes
Hola, estoy intentando hacer una prueba mínima con gtk, pero no puedo
compilar, los archivos actualmente han dejenerado en esto y ni así:

+ aplicacion.c:
#include <gui.h>


int main (int argc, char* argv[])
{
	int valor;
	valor = inicializar();

	return valor;
}

hay una carpeta que contiene 2 archivos (cabecera y código)

+ interfaz/gui.h:
int inicializar (void);

+ interfaz/gui.c:
#include <gui.h>

int inicializar (void)
{
	return 0;
}


Compilo con: gcc -I`pwd`/interfaz -g -v -Wall -o aplicacion
aplicacion.c
y me da el error: undefined reference to `inicializar'

3 cosillas:
También he probado con gui.h y gui.c en la misma carpeta que
aplicacion.c, el error es el mismo.
Introduje errores en gui.c y no los "canta" así que a gui.c ni entra.
El archivo gui.c si lo encuentra porque anteriormente escribia mal la
ruta y me decía:
gui.h: No existe el fichero ó directorio


Esta es toda la salida:

Usando especificaciones internas.
Objetivo: i486-linux-gnu
Configurado con: ../src/configure -v --with-pkgversion='Ubuntu
4.3.3-5ubuntu4' --with-bugurl=file:///usr/share/doc/gcc-4.3/
README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/
usr --enable-shared --with-system-zlib --libexecdir=/usr/lib --without-
included-gettext --enable-threads=posix --enable-nls --with-gxx-
include-dir=/usr/include/c++/4.3 --program-suffix=-4.3 --enable-
clocale=gnu --enable-libstdcxx-debug --enable-objc-gc --enable-mpfr --
enable-targets=all --with-tune=generic --enable-checking=release --
build=i486-linux-gnu --host=i486-linux-gnu --target=i486-linux-gnu
Modelo de hilos: posix
gcc versión 4.3.3 (Ubuntu 4.3.3-5ubuntu4)
COLLECT_GCC_OPTIONS='-I/home/javier/proyecto/interfaz' '-g' '-v' '-
Wall' '-o' 'aplicacion' '-mtune=generic'
 /usr/lib/gcc/i486-linux-gnu/4.3.3/cc1 -quiet -v -I/home/javier/
proyecto/interfaz aplicacion.c -D_FORTIFY_SOURCE=2 -quiet -dumpbase
aplicacion.c -mtune=generic -auxbase aplicacion -g -Wall -version -
fstack-protector -o /tmp/cca6Hujl.s
se descarta el directorio inexistente "/usr/local/include/i486-linux-
gnu"
se descarta el directorio inexistente "/usr/lib/gcc/i486-linux-gnu/
4.3.3/../../../../i486-linux-gnu/include"
se descarta el directorio inexistente "/usr/include/i486-linux-gnu"
la búsqueda de #include "..." inicia aquí:
la búsqueda de #include <...> inicia aquí:
 /home/javier/proyecto/interfaz
 /usr/local/include
 /usr/lib/gcc/i486-linux-gnu/4.3.3/include
 /usr/lib/gcc/i486-linux-gnu/4.3.3/include-fixed
 /usr/include
Fin de la lista de búsqueda.
GNU C (Ubuntu 4.3.3-5ubuntu4) versión 4.3.3 (i486-linux-gnu)
	compilado por GNU C versión 4.3.3, GMP versión 4.2.4, MPFR versión
2.4.0.
GGC heurísticas: --param ggc-min-expand=97 --param ggc-min-
heapsize=126295
Compiler executable checksum: 0bf5703b57e064ca90b48f4e2c186f4a
COLLECT_GCC_OPTIONS='-I/home/javier/proyecto/interfaz' '-g' '-v' '-
Wall' '-o' 'aplicacion' '-mtune=generic'
 as -V -Qy -o /tmp/ccoZuxIx.o /tmp/cca6Hujl.s
GNU assembler version 2.19.1 (i486-linux-gnu) using BFD version (GNU
Binutils for Ubuntu) 2.19.1
COMPILER_PATH=/usr/lib/gcc/i486-linux-gnu/4.3.3/:/usr/lib/gcc/i486-
linux-gnu/4.3.3/:/usr/lib/gcc/i486-linux-gnu/:/usr/lib/gcc/i486-linux-
gnu/4.3.3/:/usr/lib/gcc/i486-linux-gnu/:/usr/lib/gcc/i486-linux-gnu/
4.3.3/:/usr/lib/gcc/i486-linux-gnu/
LIBRARY_PATH=/usr/lib/gcc/i486-linux-gnu/4.3.3/:/usr/lib/gcc/i486-
linux-gnu/4.3.3/:/usr/lib/gcc/i486-linux-gnu/4.3.3/../../../../lib/:/
lib/../lib/:/usr/lib/../lib/:/usr/lib/gcc/i486-linux-gnu/
4.3.3/../../../:/lib/:/usr/lib/
COLLECT_GCC_OPTIONS='-I/home/javier/proyecto/interfaz' '-g' '-v' '-
Wall' '-o' 'aplicacion' '-mtune=generic'
 /usr/lib/gcc/i486-linux-gnu/4.3.3/collect2 --eh-frame-hdr -m elf_i386
--hash-style=both -dynamic-linker /lib/ld-linux.so.2 -o aplicacion -z
relro /usr/lib/gcc/i486-linux-gnu/4.3.3/../../../../lib/crt1.o /usr/
lib/gcc/i486-linux-gnu/4.3.3/../../../../lib/crti.o /usr/lib/gcc/i486-
linux-gnu/4.3.3/crtbegin.o -L/usr/lib/gcc/i486-linux-gnu/4.3.3 -L/usr/
lib/gcc/i486-linux-gnu/4.3.3 -L/usr/lib/gcc/i486-linux-gnu/
4.3.3/../../../../lib -L/lib/../lib -L/usr/lib/../lib -L/usr/lib/gcc/
i486-linux-gnu/4.3.3/../../.. /tmp/ccoZuxIx.o -lgcc --as-needed -
lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed /
usr/lib/gcc/i486-linux-gnu/4.3.3/crtend.o /usr/lib/gcc/i486-linux-gnu/
4.3.3/../../../../lib/crtn.o
/tmp/ccoZuxIx.o: In function `main':
/home/javier/proyecto/aplicacion.c:7: undefined reference to
`inicializar'
collect2: ld devolvió el estado de salida 1
Re: undefined reference to 'nombre función'
#372
Author: Alias
Date: Wed, 12 Aug 2009 12:19
5 lines
1338 bytes
(Se envió antes de tiempo jeje perdonad)

¿Alguien tiene alguna idea? cualquier posibilidad es bien recibida.

Gracias de antemano.
Re: undefined reference to 'nombre función'
#374
Author: Alias
Date: Wed, 12 Aug 2009 13:26
4 lines
1367 bytes
Vale, estaba compilando malllllllllllllllllllllllll, pffff que
despiste.

Gracias de todas formas ;)
Re: undefined reference to 'nombre funci�n'
#375
Author: Pedro Maicas
Date: Thu, 13 Aug 2009 06:53
21 lines
2086 bytes
On Wed, 12 Aug 2009 06:26:13 -0700 (PDT), Alias <jcarmena@gmail.com> wrote:

>Vale, estaba compilando malllllllllllllllllllllllll, pffff que
>despiste.

� compilando mal ?  No se a qu� te refieres, pero
por lo que has puesto en el primer mensaje, estabas llamando a 
una funcion (inicializar) que no estaba definida, de ah� el 
mensaje de error que te daba (que lo dec�a bien claro).

Es decir, cuando en el primer fichero invocas una
funcion que aparece posteriormente en otro fichero, el compilador
no sabe donde est� (ni si est�) esa funcion. Siempre declara
las funciones antes de usarlas.


Saludos :-)           -Pedro-

  http://www.maicas.net/ 

  e-mail en www.maicas.net
Re: undefined reference to 'nombre función'
#376
Author: angel
Date: Thu, 13 Aug 2009 13:55
20 lines
2185 bytes
> 
> Es decir, cuando en el primer fichero invocas una
> funcion que aparece posteriormente en otro fichero, el compilador
> no sabe donde está (ni si está) esa funcion. Siempre declara
> las funciones antes de usarlas.

¿Entonces no basta con el "#include <gui.h>" en el archivo "aplicacion.c"?
Ahí la declara, ¿ no ?.

Quizá es que el compilador no encuentra "gui.h".
Si "gui.h" está en el mismo directorio de "aplicacion.c" debería escrivir el
include así: #include "gui.h"
y si está en otro, así: #include "/path/al/archivo/gui.h"

Tal como está escrito ahora solo será encontrado si está en el paht de los
includes.
Otra opción sería indicar al compilador el camino a los archivos cabecera,
creo que con la opció "-I /camino/a/los/*.h".

Por favor. Corregidme si me equivoco que siempre me lio con esto.
Re: undefined reference to 'nombre funci_n'
#377
Author: Gonzalo Pérez de Olaguer Córdoba
Date: Thu, 13 Aug 2009 14:13
54 lines
3278 bytes
Hola angel <angelbat@graciasensefils.net>
el Thu, 13 Aug 2009 15:55:41 +0200 escribiste:

> > 
> > Es decir, cuando en el primer fichero invocas una
> > funcion que aparece posteriormente en otro fichero, el compilador
> > no sabe donde está (ni si está) esa funcion. Siempre declara
> > las funciones antes de usarlas.
> 
> ¿Entonces no basta con el "#include <gui.h>" en el archivo "aplicacion.c"?
> Ahí la declara, ¿ no ?.

Sí basta, siempre que al compilador le indiques que busque en el directorio
donde se encuentra gui.h (en este caso -I`pwd`/interfaz), cosa que ha hecho.

> Quizá es que el compilador no encuentra "gui.h".

Sí que lo encuentra.

> Si "gui.h" está en el mismo directorio de "aplicacion.c" debería escrivir el
> include así: #include "gui.h"
> y si está en otro, así: #include "/path/al/archivo/gui.h"

Correcto.

> Tal como está escrito ahora solo será encontrado si está en el paht de los
> includes.
> Otra opción sería indicar al compilador el camino a los archivos cabecera,
> creo que con la opció "-I /camino/a/los/*.h".

Eso es lo que ha hecho.

> 
> Por favor. Corregidme si me equivoco que siempre me lio con esto.

Lo que dices es correcto. Puede que me equivoque, pero creo que los includes
eran correctos, y de hecho la compilación funcionaba bien.

Lo que le estaba fallando era la operación de enlace del "linkador". El error
se lo estaba dando a la hora de enlazar, porque no había incluido gui.o para
enlazar junto a aplicaction.o

Sin mirar mas detenidamente, creo que eso es lo que le pasaba.

-- 
Gonzalo Pérez de Olaguer Córdoba <gpoc@iies.es> --- www.gpoc.es
PGP key 2861C704 --- F206 5671 6789 425D 111C  1302 214F 1934 2861 C704
Re: undefined reference to 'nombre funci_n'
#378
Author: angel
Date: Thu, 13 Aug 2009 14:42
14 lines
1792 bytes
Gonzalo Pérez de Olaguer Córdoba wrote:

> Sí basta, siempre que al compilador le indiques que busque en el
> directorio donde se encuentra gui.h (en este caso -I`pwd`/interfaz), cosa
> que ha hecho.

Vale.
He mirado más detenidamente.
En mi lector de news veo "I" (i mayúscula) como "l" (ele minúscula). De ahí
la confusión.
Tal como compila Alias, la función está declarada pero no definida. (lo
acavo de mirar en mi libro de C :-) )

Saludos.
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads