Autor Tema: Error en system() de linux  (Leído 2825 veces)

Desconectado Warlox

  • Moderadores PHP
  • PHPero Master
  • ****
  • Mensajes: 1.278
  • Karma: 77
  • Sexo: Masculino
  • A veces hay que aprender a correr antes de caminar
    • Ver Perfil
    • Página personal
Error en system() de linux
« en: 11 de Enero de 2011, 07:00:16 am »
¡Hola!

Bueno, el día de hoy estaba creando una aplicación en C++, la cual me abre la bandeja del CD. Lo que pasa es que al compilarla no me funciona, y me da un error algo raro, bueno acá está el código:

Código: [Seleccionar]
#include <stdlib.h>
#include <iostream>

int main()
{
system("eject");
}

Y el error que me da es el siguiente:

Citar
/tmp/ccn1Zr7O.o:(.eh_frame+0x12): undefined reference to `__gxx_personality_v0'
collect2: ld returned 1 exit status

¿Alguien me puede ayudar a solucionarlo, o explicarme a qué se debe?
Gracias de antemano ^^
- Moderador de PHP


Comunidad PHPeros

Error en system() de linux
« en: 11 de Enero de 2011, 07:00:16 am »

Desconectado javipilo

  • PHPero Experto
  • *****
  • Mensajes: 975
  • Karma: 31
  • Sexo: Masculino
    • Ver Perfil
Re:Error en system() de linux
« Respuesta #1 en: 11 de Enero de 2011, 16:45:04 pm »
Tienes que coger la api de linux para poder hacer eso, googlea un poquito.

Saludos

Desconectado Warlox

  • Moderadores PHP
  • PHPero Master
  • ****
  • Mensajes: 1.278
  • Karma: 77
  • Sexo: Masculino
  • A veces hay que aprender a correr antes de caminar
    • Ver Perfil
    • Página personal
Re:Error en system() de linux
« Respuesta #2 en: 11 de Enero de 2011, 19:45:23 pm »
¿Para qué necesitaría la API de Linux si estoy en Linux?
- Moderador de PHP


Desconectado javipilo

  • PHPero Experto
  • *****
  • Mensajes: 975
  • Karma: 31
  • Sexo: Masculino
    • Ver Perfil
Re:Error en system() de linux
« Respuesta #3 en: 12 de Enero de 2011, 00:26:17 am »
No se exactamente :S, esperemos a TLX...

Saludos

Desconectado Physlet

  • PHPero Experto
  • *****
  • Mensajes: 822
  • Karma: 41
  • Sexo: Masculino
  • Todo es posible con esfuerzo, dedicación e interés
    • Ver Perfil
    • PanamaDev
Re:Error en system() de linux
« Respuesta #4 en: 12 de Enero de 2011, 01:07:25 am »
Según yo entiendo, system() ejecuta el comando que pongas entre comillas como si fuese MS-DOS o en tu caso, el Terminal.  ¿El comando "eject" funciona desde terminal para abrir tu CD-ROM?

Desconectado CarlosRdrz

  • Moderador Global
  • PHPero Master
  • *****
  • Mensajes: 2.505
  • Karma: 131
  • Sexo: Masculino
  • A.k.a. TLX
    • Ver Perfil
Re:Error en system() de linux
« Respuesta #5 en: 12 de Enero de 2011, 02:05:27 am »
Según yo entiendo, system() ejecuta el comando que pongas entre comillas como si fuese MS-DOS o en tu caso, el Terminal.  ¿El comando "eject" funciona desde terminal para abrir tu CD-ROM?

Es exactamente lo que dice Physlet, system() es dependiente de la plataforma, lo que quiere decir que no funciona igual en Linux que en Windows.
En Linux tengo entendido que hay un script que te abre la bandeja del cd, que es /usr/bin/eject, osea que funcionaría con
system("/usr/bin/eject");
Pero de todas formas, eso no lo arreglará, porque aunque es necesario que lo pongas para que saque la bandeja del CD, no es lo que causa tu error.

Antes de continuar, quería comentarte de todas formas que si tu main() es de tipo int, tienes que retornar un numero, normalmente un 0, así que el main() queda como
int main() {
   system("/usr/bin/eject");
   return 0;
}

Estas lineas:
/tmp/ccn1Zr7O.o:(.eh_frame+0x12): undefined reference to `__gxx_personality_v0'
Son siempre errores del enlazador (linker), lo que normalmente quiere decir que falta algún archivo para que pueda enlazarse todo.
Pero no uno de esos archivos de inclusión que incluyes con #include (que redundancia) sino los archivos del propio compilador. Las librerias ya compiladas.

El problema es que cuando compilas con gcc o g++ tienes que tener claro si vas a compilar código C o código C++, porque gcc tiene unas librerias y usa unos archivos diferentes a g++. Tu problema es ese, estás incluyendo la librería <iostream> que es una libreria de C++, y seguramente para compilar estés usando el comando gcc.

Dos soluciones: o quitar la libreria <iostream> (puesto que no la estas usando) o en lugar de compilar con gcc compilas con g++.

Saludos!

La dedicación de mi respuesta sera directamente proporcional a la dedicación de tu pregunta.
Hacer códigos que entiendan las máquinas es fácil, lo difícil y realmente útil es hacer códigos que entiendan las personas.
http://twitter.com/CarlosRdrz
http://www.carlosrdrz.es

Desconectado Warlox

  • Moderadores PHP
  • PHPero Master
  • ****
  • Mensajes: 1.278
  • Karma: 77
  • Sexo: Masculino
  • A veces hay que aprender a correr antes de caminar
    • Ver Perfil
    • Página personal
Re:Error en system() de linux
« Respuesta #6 en: 12 de Enero de 2011, 02:38:02 am »
Es exactamente lo que dice Physlet, system() es dependiente de la plataforma, lo que quiere decir que no funciona igual en Linux que en Windows.
En Linux tengo entendido que hay un script que te abre la bandeja del cd, que es /usr/bin/eject, osea que funcionaría con
system("/usr/bin/eject");
Pero de todas formas, eso no lo arreglará, porque aunque es necesario que lo pongas para que saque la bandeja del CD, no es lo que causa tu error.

Antes de continuar, quería comentarte de todas formas que si tu main() es de tipo int, tienes que retornar un numero, normalmente un 0, así que el main() queda como
int main() {
   system("/usr/bin/eject");
   return 0;
}

Estas lineas:
/tmp/ccn1Zr7O.o:(.eh_frame+0x12): undefined reference to `__gxx_personality_v0'
Son siempre errores del enlazador (linker), lo que normalmente quiere decir que falta algún archivo para que pueda enlazarse todo.
Pero no uno de esos archivos de inclusión que incluyes con #include (que redundancia) sino los archivos del propio compilador. Las librerias ya compiladas.

El problema es que cuando compilas con gcc o g++ tienes que tener claro si vas a compilar código C o código C++, porque gcc tiene unas librerias y usa unos archivos diferentes a g++. Tu problema es ese, estás incluyendo la librería <iostream> que es una libreria de C++, y seguramente para compilar estés usando el comando gcc.

Dos soluciones: o quitar la libreria <iostream> (puesto que no la estas usando) o en lugar de compilar con gcc compilas con g++.

Saludos!

¡Efectivamente!

Bueno, creo que mi código estaba bien, en lo que fallaba era en que tenía que hacer previamente la llamada al "/usr/bin". Lo que se me ocurre es crear una función para no tener que estar todo el tiempo escribiendo el "/usr/bin", teniendo solamente que escribir el comando.

Te dejo un K+.
Saludos ^^
- Moderador de PHP