PDA

Ver la versión completa : Pregunta tonta sobre enlazado



Puck2099
14/02/2006, 15:15
Hola,

Tengo una dudilla respecto a la hora de enlazar las librerías en un programa.

Si enlazamos estáticamente una librería con -l y en realidad esa librería no se usa en el programa, ¿ese código se "injerta" en el programa o es lo bastante listo para saber que no se usará para nada y pasa de él?

No sé si me explico bien, por ejemplo, ponemos en los LDFLAGS un -lz para que enlace con la librería de compresión zip y en nuestro programa no hay nada que comprimir y/o descomprimir. ¿Se añadiría ese código y aumentaría de tamaño consecuentemente el archivo?

Saludos

BuD
14/02/2006, 15:52
Yo lei en mi primer libro de C++ que todas las funciones que no usa tu programa o alguna de las funciones que llamas en tu programa, este codigo no se incluye.

En el caso de -lz, si no usas ninguna de sus funciones, pues la tendra en cuenta a la hora de enlazar, pero como vera q no usas nada de ella, pues no incluira nada de codigo de estas. Lo mismo pasa por ejemplo con las SDL, todas las funciones sin uso (las de OpenGL por ejemplo) no las guarda. Incluso si dentro de tu programa hay una funcion que has creado pero en todo el hilo de ejecucion no la llamas ni una sola vez, esta tampoco sera guardada en el ejecutable final.

Esto es lo que creo que lei... es decir, no estoy al 100% seguro de que sea como yo digo.

KaosOverride
14/02/2006, 16:47
Yo si he obtenido distintos tamaños de ejecutable sinplemente comentando alguna linea que era la unica que llamaba a una funcion de alguna libreria concreta... Asi que supongo que lo que no necesite no lo enlaza estaticamente...

pezezin
18/02/2006, 06:26
-l sirve para enlazar de manera dinámica. Si quieres enlazar estáticamente, tienes que usar los archivos .a


Dinámica: gcc -lbar -o foo.gpe foo.c
Estática: gcc -o foo.gpe foo.c bar.a

Puck2099
18/02/2006, 06:29
-l sirve para enlazar de manera dinámica. Si quieres enlazar estáticamente, tienes que usar los archivos .a


Dinámica: gcc -lbar -o foo.gpe foo.c
Estática: gcc -o foo.gpe foo.c bar.a


Pues usando el -l y añadiendo un -static enlaza perfectamente...