Hola.
Tengo problemas para compilar/ejecutar c�gigo en C++ aparentemente
simple.

Este es el c�digo ejemplo:

//***********************
#include <iostream.h>

class Test {
public:    
    char *string;
    Test(void) {
        string = new char[16];
    }    
    ~Test(void) {
        delete [] string;
    }
    Talk (void) {
        cout << string;
    }
};

int main (void)
{
    Test *TestInstance = new Test;
    TestInstance->string = "Hello world\0";
    TestInstance->Talk;
    delete TestInstance;
}
//***********************

Intento compilar con 
        #~ c++ test.cpp -o test
y recibo lo siguiente:
/usr/bin/../lib/libstdc++.so: undefined reference to `__dup2'
/usr/bin/../lib/libstdc++.so: undefined reference to `__pipe'
/usr/bin/../lib/libstdc++.so: undefined reference to `__waitpid'
collect2: ld returned 1 exit status 

Empiezo a inverstigar y veo lo siguiente:

sadacia:~/enlaces/debian/devel# dpkg --list | grep libstdc++
ii  libstdc++2.8    2.90.29-0.6    The GNU stdc++ library (egcs version)
ri  libstdc++2.9    2.91.61-1      The GNU stdc++ library (egcs version)
sadacia:~/enlaces/debian/devel# dpkg --list | grep libg++
ii  libg++27        2.7.2.1-14.4   The GNU C++ libraries (ELF version).
ii  libg++272       2.7.2.8-0.1    The GNU C++ libraries (libc6
version).
ii  libg++272-dev   2.7.2.8-0.1    The GNU C++ libraries (libc6
version).

Resulta que el paquete libstdc++2.9 lo instal� hace un par de semanas, y
parece ser que a partir de entonces es cuando empiezo a notar 'cosas
raras'. As� que deduzco que algo pasa en mi Debian 2.0-2.1 Algo no he
instalado, creo.

Veamos m�s cosas:

sadacia:/usr/bin# ldd c++
        libc.so.6 => /lib/libc.so.6 (0x4001e000)
        /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
sadacia:/usr/bin# dpkg --list | grep libc6
ii  libc6           2.1.1-0.2      GNU C Library: shared libraries
ii  libc6-dev       2.0.7t-1       The GNU C library version 2
(development fil
ii  libc6-pic       2.0.7t-1       The GNU C library version 2 (PIC
library)
[...]
sadacia:/usr/bin# ls -la /lib/libc.*
lrwxrwxrwx   1 root     root           14 oct 16  1998 /lib/libc.so.5 ->
libc.so.5.4.38*
-rwxr-xr-x   1 root     root       584776 jun  7  1998
/lib/libc.so.5.4.38*
lrwxrwxrwx   1 root     root           13 abr 17 07:11 /lib/libc.so.6 ->
libc-2.1.1.so*
sadacia:/usr/bin# ls -la /lib/ld*
-rwxr-xr-x   1 root     root        89678 abr  8 00:29 /lib/ld-2.1.1.so*
lrwxrwxrwx   1 root     root           18 abr 17 23:01
/lib/ld-linux.so.1 -> ld-linux.so.1.9.10*
-rwxr-xr-x   1 root     root        24396 mar 28 15:39
/lib/ld-linux.so.1.9.10*
lrwxrwxrwx   1 root     root           11 abr 17 07:11
/lib/ld-linux.so.2 -> ld-2.1.1.so*
-rwxr-xr-x   2 root     root        99488 mar 28 15:39 /lib/ld.so*
-rwxr-xr-x   2 root     root        99488 mar 28 15:39
/lib/ld.so.1.9.10* 

Si en cambio programo en C puro el c�digo siguiente:
/* **************************************** */
#include <stdio.h>
#include <malloc.h>

int main (void)
{
    char *string = (char *) malloc (16 * sizeof (char));
    
    string = "Hello world\0";
    printf ("%s",string);

    free (string);
}
/* **************************************** */
Esto lo compilo con 'gcc test.c -o test'. Compila, y al ejecutarlo con
'gdb' esto es lo que ocurre:

#0  0x40077333 in __cfree ()
#1  0x8048404 in main ()

Bueno, no aporto m�s datos por ahora, ya que si no el mensaje ser�a
demasiado largo (ya lo es, as� que aprovecho para pedir disculpas por
las molestias).

Bien, la pregunta es la siguiente:
�Cre�is que me falta algo de instalar?
Si es as�, quiz� nos encontremos ante un problema de chequeo de
dependencias que se pudo pasar por alto, y habr�a que comunicarlo a los
chicos de Debian bug reports.

Muchas gracias por vuestra ayuda:

Juan Carlos

Responder a