C++ Auto-compilable

Imagen de latinpower
0 puntos

Hola,

Tengo que hacer un programa simple en c++ que necesita hacer cosas como conectarse a mysql y cargar datos. El problema que tengo es que me pidieron que sea 'auto-compilable'

Lo que me pide es que ponga #!bin/ALGO y ese algo es una shell que me va a compilar el c++ cada vez que se ejecute, él no quiere que ya esté compilado el programa, que de por cierto, tiene que ser .sh.

Alguien sabe si es posible?, ya estuve investigando shells como C Shell, pero no sé si me va a cambiar mucho la sintaxis o no me va a dejar conectarme a mysql de manera cómoda.

Gracias.

Imagen de cousteau
+1
0
-1

Se podría hacer, pero no es útil. El #! es para hacer que los scripts sean ejecutables, pero un código fuente en C++ no es un script, y compilarlo no es ejecutarlo (y además la # interfiere con la sintaxis de C++).

Para compilar automáticamente están los makefiles.

+1
0
-1

«E: dpkg was interrupted, you must manually run 'dpkg --configure -a' to correct the problem» significa que dpkg se ha interrumpido y que tienes que ejecutar "sudo dpkg --configure -a" para corregir el problema.
Imagen de gato2707
+1
0
-1

A ver:

Lo que me pide es que ponga #!bin/ALGO

Eso no es un programa en C++, es un Script, donde ALGO debe cambiarse por el nombre del intérprete que debe usarse. Yo no recuerdo que exista ningún intérprete C++, creo que incluso iría en contra de lo que es C++

y ese algo es una shell que me va a compilar el c++ cada vez que se ejecute, él no quiere que ya esté compilado el programa, que de por cierto, tiene que ser .sh.

Esta parte me dice que no se trata de cualquier Scritp: se trata de uno de Bash.

Después de tan sesudo análisis (¡¿?!) tal vez sea todo tan simple como crear un Script de bash que haga mas o menos lo siguiente.

Verificar la existencia del archivo(s) fuente de C++
Iniciar la compilación de dicho(s) archivo(s)
Si no hay error lanzar el programa ejecutable recién generado.

Pero ojo esto puede llevar al desastre con mucha facilidad. Imagina que se lanza una instancia del programa que se ha creado, ahora (así sin detener) se modifica el programa (código fuente) y se lanza una nueva "autocompilación", el SO lo permitirá ya que asignará a cada instancia sus propios recursos, el problema se presentará en dos posibles casos.

Si la segunda corrida sustituye el binario de la primera corrida, y por alguna razón la primera corrida debe recargar todo o parte del binario a la memoria, se encontrará con que hay cambios. Creo que el kernel se protege de estos casos y abortará al menos la primera corrida, si no es que ambas. Ahora dependiendo de los cambios, los datos de MySQL o de lo que sea pueden resultar dañados.

El segundo caso se presenta exclusivamente dependiendo del tipo de cambios que se hagan al fuente, digamos que se agrega un

ALTER TABLE nombreTabla etc.

Cuando la primera corrida trate de acceder a la tabla modificada el programa producirá error.

Esta situación puede llevarse incluso a nivel de bits donde un cambio en la segunda corrida podría modificar los datos que la primera corrida consideraría inválidos.

Esta es la principal razón por la que la mayoría de los IDE no te permiten compilar en tanto tengas ejecutando una versión previa del programa.

Con los lenguajes C, donde es posible incluso (con sus asegunes) cambiar valores de los registros del micro depende exclusivamente del SO el evitar que la computadora colapse, y eso no es una muy buena práctica de programación que digamos.

+1
0
-1

Saludos desde México
Mi Web: El Gato con Linux

Imagen de cousteau
+1
0
-1

tal vez sea todo tan simple como crear un Script de bash que haga mas o menos lo siguiente.

Verificar la existencia del archivo(s) fuente de C++
Iniciar la compilación de dicho(s) archivo(s)
Si no hay error lanzar el programa ejecutable recién generado.

Todo lo cual puede hacerse (y suele hacerse) con un makefile.

+1
0
-1

«E: dpkg was interrupted, you must manually run 'dpkg --configure -a' to correct the problem» significa que dpkg se ha interrumpido y que tienes que ejecutar "sudo dpkg --configure -a" para corregir el problema.
Imagen de gato2707
+1
0
-1

Eso hace un makefile. Pero el requerimiento que se le plantea es que sea un script de bash, por lo que el makefile, al menos en forma directa no es una opción razonable.

Además los makefile por lo general no lanzan la aplicación recién compilada.

+1
0
-1

Saludos desde México
Mi Web: El Gato con Linux