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