Librerias dinamicas, librerias compartidas, so, dll, etc.

Para entender como vamos a realizar la aplicación multiplataforma primero debemos de entender como vamos a escribir las librerías que vamos a enlazar como módulos. Para todo ello voy a escribir un minitutorial para uso interno en el que voy a intentar explicar un poco la diferencia de enfoques que aplica windows y linux de cara a las librerías de carga dinámica.

Para comenzar empezaré explicando el enfoque de windows.

Windows con sus DLL permite cargar una librería en tiempo de ejecución, esto es que nosotros definiríamos la carga de la dll en un momento dado y de ésta manera tendríamos acceso a sus métodos, que ademas podemos coger por "nombre" lo cual permitiría realizar un sistema de "módulos" teniendo que definir una nomenclatura determinada que una vez realizada podría dar una extensibilidad bastante razonable. Ademas permite hacer que una dll devuelva una clase, de manera que podríamos hacer que cuando alguien quiere crear un modulo nuevo, pudiéramos darle una clase abstracta de la que heredar y el devolviera al final una clase con los métodos necesarios definidos. Como vemos en el enlace [3] esto es lo que deberemos de hacer para mantener una interoperatibilidad linux-windows.

Para crear una librería dinámica podemos seguir el tutorial [2] y [3], el uno nos explica como crear una dll en windows,.

La única pega que le veo por ahora es que parece ser que necesitamos importar un .h en windows, pero no me lo termino de creer. Según 3 en linux solo tienes que incluir la "clase madre" de la cual heredamos los módulos. Pensándolo de esa manera en windows puede ser igual, siempre que sigas la especificación de linux, pero usando las librerías windows.

En [1] tenemos como programar librerías compartidas en linux que son la base de las librerías dinámicas.

Voy a intentar generar una aplicación que cargue dinámicamente tanto en linux como en windows una librería y muestre por "consola" el resultado de llamar a un método del objeto que será devuelto. Como prueba de concepto.

[1]http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html
[2]http://www.zator.com/Cpp/E1_4_4b2a.htm
[3]http://www.isotton.com/devel/docs/C++-dlopen-mini-HOWTO/C++-dlopen-mini-HOWTO.html