domingo, 7 de agosto de 2011

Curso de programación: Capítulo 8. Bibliotecas, librerias y linkado


Hola a todos....

Un compañero ,lector del blog, ha echo un petición muy acertada que no se como no se me había ocurrido antes. Cito textualmente:
"Pako, te propongo que hagas un capítulo esplicando cómo se linkan las bibliotecas, qué son los ficheros lib, h, dll. Así como las propiedades de los proyectos (casi todo el mundo usa MVS2010). "

Así pues, vamos a por trabajo:

Breve descripción de nomenclatura:
Archivos .c o .cpp: Archivos de código de C o C++ respectivamente, archivos donde escribiremos nuestros programas y funciones.

Archivos .h : Archivos de cabecera o Headers. En estos archivos escribiremos todo aquello que tecnicamente no es código pero si el cual el código no tendria mucho sentido: Cabeceras de funciones, definición de clases, defines, inclusión de ficheros externos,  etc... es decir. Es una foma de tener el código más estructurado. Podeis leer cualquier .h del game engine para ver un ejemplo de lo que me refiero.

Archivos .lib : Archivos de libreria estática.  Básicamente es una forma de distribuir el código de una aplicación grande  sin tener que dar todo el código fuente, o sencillamente de no tener que recompilar una libreria cada vez que compilemos una aplicación. Con esta manera de trabajar con librerias el código de la libreria queda insertado dentro del código de la aplicación haciendo que nosotros solo veamos un archivo .exe .

Archivo .dll : Dinamyc Link Library. Dicho de otra manera, libreria dinámica. Es decir, cuando compilemos nuestro proyecto tendremos, por un lado el ejecutable y por otro lado el .dll de la libreria que será usado por el .exe.

Que es mejor .lib o .dll?? : Depende. Ambas son maneras de trabajar con librerias igual de válidas.  Si el rendimiento es un factor clave y tenemos una aplicación que muy raramente cambiará de libreria, entonces  la lib tiene preferencia. Si estamos delante de una aplicación de la cual se espera que va a cambiar con frecuencia de libreria, vale más la pena una .dll, por que así no hace falta ni recompilar. Por otro lado si la extensión de la libreria es bastante grande (del orden de los megas) y tenemos un conjunto de aplicaciones que usan la misma libreria, nos vale la pena las .dll para reaprovechar el espacio(una .dll sirve para todas las aplicaciones).


Dicho esto, como se linka una libreria??
Hay 2 maneras de linkar una libreria:
1. Si la libreria nos la proporcionan con el código fuente (.c, .cpp y .h). Lo único que hemos de hacer es añadir a nuestro proyecto las rutas de inclusión. En Visual Studio se hace así:
           - Botón derecho encima del proyecto. Seleccionad propiedades.
           - Propiedades de configuración >> C/C++
           - Dentro de Directorios de inclusión adicionales añadís vuestra ruta donde teneis los .h
           - Añadid al proyecto todos los .c/.cpp/.h de la libreria.
           - Compilad

2. Si la libreria es estática o dinámica primero de todo tendreis que mirar que la tengais bien instalada (normalmente se tienen que copiar ciertos archivos en c:/system , cuando os bajeis la libreria tendria que tener un README con las instrucciones) . En el caso de las .dll podeis dejarlas al lado del .exe para poder distribuirlo junto. En el código solo debereis usar una linea de este estilo al inicio del main.cpp:
                    #pragma comment(lib, "corona.lib")
Si no os funcionara decidlo que buscariamos solución.

Respecto a las propiedades de los proyectos, prefiero dejarlo como tema abierto. Creo que no hay mejor manera de aprender como funcionan que inspeccionando por vuestra cuenta. Si teneis problemas decidlo y os echaré un cable siempre que pueda.

Espero que os haya servido y que hayais aprendido.

Nos vemos
LordPakusBlog

2 comentarios :

  1. Muchas gracias Pako. Así da gusto. Propongo un tema y en menos de 24h ya lo tienes preparado.
    Por cierto, me estoy planteando apuntarme el curso "Diseño y programación de videojuegos"
    http://www.uoc.edu/masters/esp/web/informatica_multimedia_telecomunicacion/videojuegos/postgrau/diseno_y_programacion_de_videojuegos/

    ResponderEliminar
  2. Mientras pueda lo iré haciendo.. tampoco te extrañes si algún dia no me conecto en una semana, que algún me pillaré vacas ( o no :D )

    Respecto al posgrado, no te puedo aconsejar. De este posgrado en concreto he recibido buenos y malos comentarios. Por un lado hay el tema pasta que se ha de tener en cuenta, y por otro el tema de cual es tu nivel de programación y hasta donde te van ha hacer llegar.

    Hazlo o no lo hagas, eso está a tu elección, pero elijas lo que elijas piensatelo bien, no te puedo dar mayor consejo.

    Siento no poder ser más aclarativo.

    ResponderEliminar

Entradas populares