Cita:
Iniciado por dehm 1.- ¿Esto suele ser la forma habitual de trabajar?
El código compilado puedes ofrecerlo, bien en plan monolítico en un único ejecutable o distribuído en librerías dinámicas.
La ventaja del primer sistema es que únicamente es necesario llevar consigo un archivo para que tu programa funcione, mientras que la ventaja del segundo sistema es que las actualizaciones suelen ser menos traumáticas (no es necesario sustituir el ejecutable completo sino únicamente aquellas librerías que tienen cambios). Además, usar librerías dinámicas te permite cargar y descargar librerías en tiempo de ejecución, con lo que puedes reducir el consumo de recursos de tu ejecutable, lo cual viene especialmente bien en sistemas con pocos recursos, como los sistemas empotrados o embebidos.
De entre estas dos formas de trabajar, yo diría que la más habitual es la segunda, asi que sí, ofrecer librerías dinámicas es algo habitual.
Cita:
Iniciado por dehm 2.- ¿Me puedo descargar de github los archivos cpp y compilar sin las librerías dinámicas?
Legalmente, eso dependerá de la licencia con la que te estén ofreciendo los fuentes. Ahora que si el programa es para uso interno y no vas a comercializarlo es complicado que nadie te pida explicaciones.
Cita:
Iniciado por dehm 3.- Al ejecutar la prueba (que no tiene nada más que un widget especializado) el programa cierra, por culpa de algo de memoria. ¿Si compilo con los cpp tendré más oportunidades de detectar el origen del error?
Hechar la culpa a la memoria... así sin explicaciones es decir más bien poca cosa:
- El equipo se queda sin memoria?
- Estás accediendo a posiciones de memoria no válidas?
- No se carga alguna DLL y, en consecuencia, el programa no encuentra determinadas funciones que necesita para su ejecución?
Cita:
Iniciado por dehm 4.- ¿Cómo puedo saber que estoy usando los headers e implementaciones adecuados? No veo ninguna correspondencia entre cada fichero. (lo digo por si la causa del problema es esa)
Tendrás que tirar de la documentación de la librería y de foros donde trabajen con esas librerías... o bien puedes estudiar el código fuente (no suele ser lo recomendable).
Suele suceder que la librería tenga uno o unos pocos archivos de cabecera general que te ofrece las funciones más habituales. En estos casos con añadir uno o dos includes tu programa debería ser capaz de compilar.
Cita:
Iniciado por dehm 5.- Se supone que las librerías dinámicas se usan durante la ejecución, no durante la compilación. Entonces, ¿cómo realmente busca el compilador las implementaciones?
Que conste que esto que voy a contar es una versión simplificada cuyo único sentido es que se entienda, al menos por encima, el proceso.
Cuando se genera una librería dinámica, normalmente se crea también un fichero que hace las veces de índice, es decir, ofrece cierta información sobre el contenido de la DLL... además la propia DLL tiene información sobre la ubicación de cada función "pública" de la DLL.
Al compilar debes incluir una referencia al fichero del índice de la DLL, de tal forma que el compilador sea capaz de identificar qué recursos va a tener que localizar en la DLL.
En tiempo de ejecucion, el programa carga en memoria la DLL. Cuando el programa necesita hacer uso de alguna función de la DLL entonces se llama a una función especial de la DLL. Esta función recibe un identificador y devuelve la dirección de memoria asociada a dicho identificador. Con la dirección de memoria en tu poder, tu programa ya puede llamar a la función de la misma forma que si la función estuviese embebida en tu propio programa.
Un saludo