Foros del Web » Programación para mayores de 30 ;) » C/C++ »

¿Porque el error siguiente?

Estas en el tema de ¿Porque el error siguiente? en el foro de C/C++ en Foros del Web. Código PHP: #include <sys/types.h> #include <sys/resource.h> #include <sys/time.h> #include <math.h> #include <unistd.h> #include <stdio.h> void work  () {     FILE  * f ;     int i ;     double x  =  4.5 ;     ...
  #1 (permalink)  
Antiguo 25/09/2006, 10:53
Avatar de Koveart
Colaborador
 
Fecha de Ingreso: julio-2002
Ubicación: Colombia
Mensajes: 4.407
Antigüedad: 22 años, 4 meses
Puntos: 29
¿Porque el error siguiente?

Código PHP:
#include <sys/types.h>
#include <sys/resource.h>
#include <sys/time.h>
#include <math.h>
#include <unistd.h>
#include <stdio.h>

void work ()
{
   
FILE *f;
   
int i;
   
double x 4.5;

   
tmpfile();
   for (
i=010000i++){
      
fprintf(f,"Do some output\n");
      if(
ferror(f)){
         
fprintf(stderr,"Error writing temporary files\n");
         exit(
1);
      }
   }
      for(
i=01000000i++)
         
log(x*3.21);
}
int main()
{
   
struct rusage r_usage;
   
struct rlimit r_limit;
   
int priority;

   
work();
   
getrusage (RUSAGE_SELF, &r_usage);
   
printf ("CPU Usage: User = %ld.%06ld, System = %ld.%06ld\n",
            
r_usage.ru_utime.tv_secr_usage.ru_utime.tv_usec,
            
r_usage.ru_stime.tv_secr_usage.ru_utime.tv_usec);

   
priority getpriority(PRIO_PROCESSgetpid());
   
printf("Current priority = %d\n"priority);

   
getrlimit(RLIMIT_FSIZE, &r_limit);
   
printf("Current FSIZE limit: soft = %ld, hard = %ld\n"r_limit.rlim_cur,r_limit.rlim_max);
   
r_limit.rlim_cur 2048;
   
r_limit.rlim_max 4096;
                
printf("Setting a 2K size limit\n");
   
setrlimit(RLIMIT_FSIZE, &r_limit);

   
work();
   exit(
0);


Me da este error

Cita:
[koven@koven programas]$ gcc -o limits limits.c
limits.c: En la función âworkâ:
limits.c:19: aviso: declaración implÃ*cita incompatible de la función interna âexitâ
limits.c: En la función âmainâ:
limits.c:48: aviso: declaración implÃ*cita incompatible de la función interna âexitâ
/tmp/ccyqMKyZ.o: En la función `work':
limits.c:(.text+0xaa): referencia a `log' sin definir
collect2: ld devolvió el estado de salida 1

Saludos
__________________
“Los soñadores no existen, se lo dice un soñador que ha tenido el privilegio de ver realidades que ni siquiera fue capaz de soñar”
  #2 (permalink)  
Antiguo 25/09/2006, 18:20
 
Fecha de Ingreso: abril-2006
Ubicación: Acapulco Gro. México
Mensajes: 483
Antigüedad: 18 años, 7 meses
Puntos: 2
Bueno, no tengo la oportunidad de verificar todo, ya que no cuento con el fichero resourse.h, lounico que puedo decir es que te falta agregar el fichero stdlib.h

Saludos.
  #3 (permalink)  
Antiguo 25/09/2006, 20:19
Avatar de Koveart
Colaborador
 
Fecha de Ingreso: julio-2002
Ubicación: Colombia
Mensajes: 4.407
Antigüedad: 22 años, 4 meses
Puntos: 29
Una vez añadida la librería en cuestión solamente queda por ver que el error al parecer es de la librería math.h porque no me está reconociendo la función log.

Cita:
[koven@koven programas]$ !g
gcc -o limits limits.c
/tmp/ccZxRrll.o: En la función `work':
limits.c:(.text+0xaa): referencia a `log' sin definir
collect2: ld devolvió el estado de salida 1
Saludos
__________________
“Los soñadores no existen, se lo dice un soñador que ha tenido el privilegio de ver realidades que ni siquiera fue capaz de soñar”
  #4 (permalink)  
Antiguo 25/09/2006, 21:00
 
Fecha de Ingreso: abril-2006
Ubicación: Acapulco Gro. México
Mensajes: 483
Antigüedad: 18 años, 7 meses
Puntos: 2
si ya veo, pero no tengo idea de que cause ese error, el fichero math.h esta incluido. verifica si esta definida en el fichero math.h, y si tienes que hacer algo mas al linkar, supongo que compilas en linux.
  #5 (permalink)  
Antiguo 26/09/2006, 11:05
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años, 7 meses
Puntos: 17
Hum, realmente extraño... El código de work() es perfectamente válido : /

Haz una prueba: Comenta el log, y prueba. Pon otra función (de math.h) y prueba de nuevo.
  #6 (permalink)  
Antiguo 26/09/2006, 20:07
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 22 años
Puntos: 52
Se supone que log debe estar en math. Pero "referencia" suena mas a problema de linkeado que a encabezados.

Podrias intentar linkear math manualmente con e -lmath(creo que ais es).

Saludos
  #7 (permalink)  
Antiguo 27/09/2006, 07:14
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años, 7 meses
Puntos: 17
Cita:
Iniciado por Instru Ver Mensaje
Se supone que log debe estar en math. Pero "referencia" suena mas a problema de linkeado que a encabezados.

Podrias intentar linkear math manualmente con e -lmath(creo que ais es).
gcc (como los compiladores en general) añaden la libc (es decir, el ANSI-C) de manera estándar. Y math.h está dentro del estándar, es decir, en libc.

En cualquier caso, que revise la configuración de su gcc de nuevo y nos comente.
  #8 (permalink)  
Antiguo 23/04/2014, 05:42
 
Fecha de Ingreso: abril-2014
Mensajes: 1
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: ¿Porque el error siguiente?

Creo que el problema es que intentas compilarlo como si fuera en C, pruebalo en C++:

g++ -o limits limits.c
  #9 (permalink)  
Antiguo 23/04/2014, 11:01
Avatar de abimex
Colaborador
 
Fecha de Ingreso: marzo-2007
Ubicación: ~
Mensajes: 751
Antigüedad: 17 años, 8 meses
Puntos: 137
Respuesta: ¿Porque el error siguiente?

libm no es parte te libc, intenta agregando la libreria math al linker

Código make:
Ver original
  1. gcc -o limits limits.c -lm
__________________
>> abimaelmartell.com

Última edición por abimex; 23/04/2014 a las 11:21
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:03.