• Domingo 22 de Diciembre de 2024, 19:34

Autor Tema:  Generar Programa Con Pocas Depencias  (Leído 4691 veces)

robokop

  • Miembro activo
  • **
  • Mensajes: 70
    • Ver Perfil
Generar Programa Con Pocas Depencias
« en: Domingo 10 de Septiembre de 2006, 01:08 »
0
Ola :hola:
Quisiera saber como es posible generar un programa sin las depencias de msvcrt en vc++ , y tambien como hacer que pese menos de 3kb.
Se que es posible en vc++ porque eternal idol en un tema de otro foro hizo una aplicacion que mostraba un msgbox y solamente depencia del kernel y pesaba 1 kb  :blink:
Debe ser algo de la configuracion pero no eh podido lograr evitar las dependencias y el tamaño.
a lo maximo que eh llegado ah sido compilando con release y quitando el manifest me lo deja en 5.00 kb pero si muevo la aplicacion de directorio me da error porque no encuentra la libreria msvrc80 .
En las propiedades del proyecto en el nodo de C++ cambie en run time librery el /MDB por /MT y me genera un ejecutable que solo depende del kernel32 pero pesa 56 kb .
Alguien sabe la configuracion exacta y en que propiedades debo cambiar para lograr lo que quiero.
Ya eh buscado en msdn y en otras webs pero nada  :wacko:  :wacko:
gracias

x.cyclop

  • Miembro de PLATA
  • *****
  • Mensajes: 1039
  • Nacionalidad: mx
    • Ver Perfil
Re: Generar Programa Con Pocas Depencias
« Respuesta #1 en: Domingo 10 de Septiembre de 2006, 04:33 »
0
Yo busco lo mismo. :P

Le cambio el character-set a Multibyte, lo compilo como Release, le quito lo de "Inherit dependences", lo optimizo para menor tamaño (/O1) y aún así ocupa como 160Kb.

¿Hay forma de que solamente se genere el archivo del proyecto (vcproj), el de código/recursos (c, c++, rc) y el ejecutable/librería (exe, dll)? :huh:

- Great works aren't produced on the first try. [Ernest Hemingway]
- Be ambitious, yet realistic in your dreams. Do something that makes a positive impact. Don’t let the nay-sayers get you down. [Bjarne Stroustrup]

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Generar Programa Con Pocas Depencias
« Respuesta #2 en: Domingo 10 de Septiembre de 2006, 09:46 »
0
Para lo primero ya obtuviste la respuesta, tenes que enlazar estaticamente la Run Time. Para lo segundo directamente tenes que obviar toda Run Time del compilador y construir la tuya con solo las funciones que necesites para el programa. Esta Run Time puede incluso estar metida dentro del mismo ejecutable o al estilo de VC++ en una libreria .LIB o .DLL.

Ese ejecutable que hice y todos los que hacemos para modo Usuario no estan enlazados ni dependen directamente del Kernel sino que lo hacen de diferentes DLLs de modo Usuario como pueden ser User32.dll para la funcion MessageBoxA/W.

Casualmente en este foro hay una serie de articulos escritos por mi, inconclusa hoy y probablemente por siempre, donde se explica una manera de hacer esto:

Crear nuestra propia Run Time Library (Primera Parte)

Crear nuestra propia Run Time Library (Segunda Parte)

Crear nuestra propia Run Time Library (Tercera Parte)

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

robokop

  • Miembro activo
  • **
  • Mensajes: 70
    • Ver Perfil
Re: Generar Programa Con Pocas Depencias
« Respuesta #3 en: Domingo 10 de Septiembre de 2006, 16:59 »
0
ok muchas gracias vere esos articulos.  :lol:  :lol:
estas hecho toda un arma en programacion  :lightsabre:

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Generar Programa Con Pocas Depencias
« Respuesta #4 en: Domingo 10 de Septiembre de 2006, 17:55 »
0
Cita de: "robokop"
ok muchas gracias vere esos articulos.  :lol:  :lol:
estas hecho toda un arma en programacion  :lightsabre:
De nadas; hoy vi los articulos y ya tienen mas de dos años :o Como pasa el tiempo ...

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

x.cyclop

  • Miembro de PLATA
  • *****
  • Mensajes: 1039
  • Nacionalidad: mx
    • Ver Perfil
Re: Generar Programa Con Pocas Depencias
« Respuesta #5 en: Domingo 10 de Septiembre de 2006, 17:59 »
0
No sabía que escribías artículos. :P

Gracias.

Citar
hoy vi los articulos y ya tienen mas de dos años  :o  Como pasa el tiempo ...
Ya hay que jubilarse... :rolleyes:

- Great works aren't produced on the first try. [Ernest Hemingway]
- Be ambitious, yet realistic in your dreams. Do something that makes a positive impact. Don’t let the nay-sayers get you down. [Bjarne Stroustrup]

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Generar Programa Con Pocas Depencias
« Respuesta #6 en: Domingo 10 de Septiembre de 2006, 18:12 »
0
Cita de: "X.Cyclop"
No sabía que escribías artículos. :P

Gracias.

Eran otras epocas, otros lugares, otros trabajos ... otra vida casi  :P

Cita de: "X.Cyclop"
Ya hay que jubilarse... :rolleyes:

Dentro de poco, me estoy por comprar una casa para retirarme en Groenlandia :lol::lol::lol:

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

x.cyclop

  • Miembro de PLATA
  • *****
  • Mensajes: 1039
  • Nacionalidad: mx
    • Ver Perfil
Re: Generar Programa Con Pocas Depencias
« Respuesta #7 en: Domingo 17 de Septiembre de 2006, 18:24 »
0
Bueno, voy a parecer un idiota pero nimodo, no se nace sabiendo.

¿Dónde está la línea de comandos para meter ese código? :huh:

link codigo.obj /NODEFAULTLIB /ENTRY:main

- Great works aren't produced on the first try. [Ernest Hemingway]
- Be ambitious, yet realistic in your dreams. Do something that makes a positive impact. Don’t let the nay-sayers get you down. [Bjarne Stroustrup]

Geo

  • Miembro de PLATA
  • *****
  • Mensajes: 1011
  • Nacionalidad: mx
    • Ver Perfil
    • http://hsblog.mexchip.com
Re: Generar Programa Con Pocas Depencias
« Respuesta #8 en: Domingo 17 de Septiembre de 2006, 19:11 »
0
Si no me equivoco Eternal Idol se refiere a instrucciones desde la línea de comandos, además de no compilar y enlazar en un paso sino hacerlo por separado.

Yo hice la prueba compilando/enlazando así (estoy usando VC++ Express):

main.cpp
Código: Text
  1.  
  2. int main( int argc, char* argv[], char* env[] ) {
  3.   return 50;
  4. }
  5.  
  6.  

Citar
cl main.cpp
main.exe: 45,056 bytes.

Citar
cl main.cpp /link /NODEFAULTLIB /ENTRY:main
main.exe: 1,024 bytes.

En el IDE, esto se debería poner en Propiedades->Linker->Command Line, aunque a mi me dió problemas y mejor lo hice todo desde línea de comandos.

Por cierto, los artículos de Eternal Idol se ven muy interesantes, a ver si puedo darle una leída el próximo fin (porque ahorita todavía tengo cosas que hacer :P).

Saludos,
JJ (Geo).
La imaginación es el límite.
Hardware & Software | Mexchip

x.cyclop

  • Miembro de PLATA
  • *****
  • Mensajes: 1039
  • Nacionalidad: mx
    • Ver Perfil
Re: Generar Programa Con Pocas Depencias
« Respuesta #9 en: Domingo 17 de Septiembre de 2006, 19:31 »
0
Ya me salió. :kicking:

Pero tengo dudas, jeje. ¿Hay alguna manera de que el archivo *.ncb no ocupe tanto o de quitar su dependencia? Ocupa como 70kb, y si lo borro mi proyecto no sirve. <_<

Bueno, más bien, yo solo quiero el archivo de mi proyecto, el resultado (*.exe, *.dll...), el objeto (*.obj, que no se para qué sirve pero no me molesta) y el archivo de código (*.c, *.cpp), nada más.

¿Se puede?

El MSDN no dice nada de esto.  <_<

- Great works aren't produced on the first try. [Ernest Hemingway]
- Be ambitious, yet realistic in your dreams. Do something that makes a positive impact. Don’t let the nay-sayers get you down. [Bjarne Stroustrup]

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Generar Programa Con Pocas Depencias
« Respuesta #10 en: Domingo 17 de Septiembre de 2006, 19:57 »
0
El ejecutable no depende del NCB ni lo tenes que distribuir asi que no interesa en lo mas minimo.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Generar Programa Con Pocas Depencias
« Respuesta #11 en: Domingo 17 de Septiembre de 2006, 20:09 »
0
Cita de: "Geo"
Si no me equivoco Eternal Idol se refiere a instrucciones desde la línea de comandos, además de no compilar y enlazar en un paso sino hacerlo por separado.

En el IDE, esto se debería poner en Propiedades->Linker->Command Line, aunque a mi me dió problemas y mejor lo hice todo desde línea de comandos.
Si y para eso necesitamos el /c en el cl. Supongo que te habra fallado si usaste /link blablabla ya que no hace falta. Incluso esas opciones figuran en el enlazador y no hace falta agregarlas a la linea de comandos del proyecto a mano.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

robokop

  • Miembro activo
  • **
  • Mensajes: 70
    • Ver Perfil
Re: Generar Programa Con Pocas Depencias
« Respuesta #12 en: Sábado 23 de Septiembre de 2006, 18:05 »
0
Bueno jugando con el linkeador logre hacer un ejecutable de 1 kb que hace un Msgbox eso sin programar mi propia libreria y solamente depende del kernel32 , eso lo logre hacer en visual c++ 6 en el vc++ 2005 lo maximo que eh logrado ah sido 5 kb.
El truco en esto esta en no utilizar un main y al no utilizarlo no se puede usar printf o cosas de consola , las apis si se pueden usar perfectamente y otra cosas como sockets(cualquier cosas que no sea de consola)
antes se tiene que cambiar debug por release
Código: Text
  1. #pragma optimize("gsy",on)
  2. #pragma comment(linker,"/RELEASE")
  3. #pragma comment(linker,"/ENTRY:EntryPoint")
  4. #pragma comment(linker,"/MERGE:.rdata=.data")
  5. #pragma comment(linker,"/MERGE:.text=.data")
  6. #pragma comment(linker,"/MERGE:.reloc=.data")
  7. #pragma comment(linker,"/SECTION:.text,EWR /IGNORE:4078")
  8. #pragma comment(linker,"/FILEALIGN:0x200")
  9. #pragma comment(linker,"/base:0x13140000")
  10. #include "windows.h"
  11.  
  12. void EntryPoint()
  13. {
  14.    MessageBox(0,"Creando un ejecutable de 1 kb","Hola desde C++",0);
  15.  
  16. }
  17.  

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Generar Programa Con Pocas Depencias
« Respuesta #13 en: Sábado 23 de Septiembre de 2006, 18:42 »
0
Cita de: "robokop"
Bueno jugando con el linkeador logre hacer un ejecutable de 1 kb que hace un Msgbox eso sin programar mi propia libreria y solamente depende del kernel32 , eso lo logre hacer en visual c++ 6 en el vc++ 2005 lo maximo que eh logrado ah sido 5 kb.
Ese era el ejemplo original que nombrabas haber visto en el otro foro  :devil:

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

robokop

  • Miembro activo
  • **
  • Mensajes: 70
    • Ver Perfil
Re: Generar Programa Con Pocas Depencias
« Respuesta #14 en: Sábado 23 de Septiembre de 2006, 18:59 »
0
Cita de: "Eternal Idol"
Cita de: "robokop"
Bueno jugando con el linkeador logre hacer un ejecutable de 1 kb que hace un Msgbox eso sin programar mi propia libreria y solamente depende del kernel32 , eso lo logre hacer en visual c++ 6 en el vc++ 2005 lo maximo que eh logrado ah sido 5 kb.
Ese era el ejemplo original que nombrabas haber visto en el otro foro  :devil:
No te entiendo muy bien que quieres decir , este ejemplo lo saque investigando varias cositas y al final las relacione todas , porque habia encontrado un codigo de hacer un ejecutable en vc++6 de 3 kb y se me ocurrio complementarlo y logre ponerlo de 1kb

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Generar Programa Con Pocas Depencias
« Respuesta #15 en: Sábado 23 de Septiembre de 2006, 21:20 »
0
Cita de: "robokop"
No te entiendo muy bien que quieres decir , este ejemplo lo saque investigando varias cositas y al final las relacione todas , porque habia encontrado un codigo de hacer un ejecutable en vc++6 de 3 kb y se me ocurrio complementarlo y logre ponerlo de 1kb
Te habras olvidado de lo que dijiste en el primer mensaje de este hilo:

"Se que es posible en vc++ porque eternal idol en un tema de otro foro hizo una aplicacion que mostraba un msgbox y solamente depencia del kernel y pesaba 1 kb"

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

robokop

  • Miembro activo
  • **
  • Mensajes: 70
    • Ver Perfil
Re: Generar Programa Con Pocas Depencias
« Respuesta #16 en: Sábado 23 de Septiembre de 2006, 22:52 »
0
a si perdon , repito que no te entendi muy bien a lo que te referias si hace exactamente lo mismo , yo pensaba que decias del codigo que puse.
salu2  :devil: