Compilar y ejecutar sin necesidad de tener las .DLL'S

Iniciado por #Aitor, 17 Febrero 2018, 16:27 PM

0 Miembros y 2 Visitantes están viendo este tema.

#Aitor

Pues eso, uso Codeblocks y creé un ahorcado todo cutre, la cosa está en que usé algunas librerias como la de vectores, la de ficheros, etc...

Mi pc puede ejecutar el programa sin problema, pero otros compañeros requieren de algunas .DLL.

¿Hay alguna forma de expotar el programa con todo ello incluido para no necesitar meter todas las DLL que se vayan pidiendo? Gracias.
Mi algoritmo en PHP (estupideces y más).
Código (php) [Seleccionar]
while($Se_feliz){
  Piensa_un_OBJETIVO(); // Sin excusas!
  if($Tienes_un_objetivo){
    Suspira(); // Sé paciente.
    if($Consigues_el_objetivo){ echo "¡Felicidades #Aitor!";return;
      //RETURN; ¿O volvemos a empezar?
    }else{
      Inténtalo_de_nuevo();
    }
  }
}

vangodp

Normalmente las librerías deberían estar configurada para que cuando mude el tipo de proyecto para relesed, como en la siguiente imagen, debería solucionar el problema:


Si no de una leída aquí:
https://stackoverflow.com/questions/13768515/how-to-do-static-linking-of-libwinpthread-1-dll-in-mingw

Puede dar una mirada aquí también, hay una explicación en castellano:
https://iie.fing.edu.uy/~vagonbar/gcc-make/gcc.htm#4.Enlazado

Básicamente para compilar de forma estática(dll adjuntos), en consola bastaría hacer algo como eso:
Código (cpp) [Seleccionar]
gcc -static -o circulo circulo.c
Su programa está compilando de forma dinámica por eso no incluye los dll dentro.

Para no tener que estar poniendo -static todo el tiempo en linea de comandos, o cuando usas el botón "compile" de Code::blocks, vete a la pestaña Settings/Compiler Settings...


E en la pestaña Other compiler settings:


...Escriba -static, con eso verás que al compilar sale -static en la linea que genera el codeblocks al compilar, como en la foto:


Básicamente cualquier comando puede ser inserido ahí de los que ves en la primera página que he puesto, y muchos otros, eso terá efecto em todos los programas que compiles de ahí adelante.

Espero que le ayude.

Seurte

Otra cosa más... Siempre de una mirada en la documentación de las bibliotecas que uses para saber como linkar de forma correcta, estática o dinámicamente, esas explicaciones que puse son para las bibliotecas padrón, las que no son padrón pueden variar algo.

#Aitor

Cita de: vangodp en 17 Febrero 2018, 19:09 PM
Normalmente las librerías deberían estar configurada para que cuando mude el tipo de proyecto para relesed, como en la siguiente imagen, debería solucionar el problema:


Si no de una leída aquí:
https://stackoverflow.com/questions/13768515/how-to-do-static-linking-of-libwinpthread-1-dll-in-mingw

Puede dar una mirada aquí también, hay una explicación en castellano:
https://iie.fing.edu.uy/~vagonbar/gcc-make/gcc.htm#4.Enlazado

Básicamente para compilar de forma estática(dll adjuntos), en consola bastaría hacer algo como eso:
Código (cpp) [Seleccionar]
gcc -static -o circulo circulo.c
Su programa está compilando de forma dinámica por eso no incluye los dll dentro.

Para no tener que estar poniendo -static todo el tiempo en linea de comandos, o cuando usas el botón "compile" de Code::blocks, vete a la pestaña Settings/Compiler Settings...


E en la pestaña Other compiler settings:


...Escriba -static, con eso verás que al compilar sale -static en la linea que genera el codeblocks al compilar, como en la foto:


Básicamente cualquier comando puede ser inserido ahí de los que ves en la primera página que he puesto, y muchos otros, eso terá efecto em todos los programas que compiles de ahí adelante.

Espero que le ayude.

Seurte

Otra cosa más... Siempre de una mirada en la documentación de las bibliotecas que uses para saber como linkar de forma correcta, estática o dinámicamente, esas explicaciones que puse son para las bibliotecas padrón, las que no son padrón pueden variar algo.


Buenas, lamento responder tan tarde, y gracias por tu ayuda!

La primera opción, no me deja cambiarla, está desabilitada y no aparece ningún texto Debug/Release.

En cuánto a la segunda opción, he probado pero el error perdura, tras incluso incluir las DLL a mano, lanza un error sobre un problema con vinculos dinámicos.

Gracias y lamento las molestias.
Mi algoritmo en PHP (estupideces y más).
Código (php) [Seleccionar]
while($Se_feliz){
  Piensa_un_OBJETIVO(); // Sin excusas!
  if($Tienes_un_objetivo){
    Suspira(); // Sé paciente.
    if($Consigues_el_objetivo){ echo "¡Felicidades #Aitor!";return;
      //RETURN; ¿O volvemos a empezar?
    }else{
      Inténtalo_de_nuevo();
    }
  }
}