Compilación cruzada en Lazarus en Linux usando UniDAC como ejemplo

Nuestros usuarios han planteado repetidamente el tema de los proyectos de compilación cruzada en Lazarus en sistemas Linux. Entonces, en este artículo, queremos analizar más de cerca las características de la compilación cruzada en Lazarus y mostrar cómo crear una aplicación simple usando UniDAC y compilarla para la plataforma Windows en Linux.

Contenido

Índice

    Configuración de un entorno de trabajo

    Primero, consideremos rápidamente configurar un entorno de trabajo.

    Para crear nuestro proyecto, utilizamos Lazarus 2.0.12 + FPC 3.2.0, instalado en una estación de trabajo con sistema operativo Ubuntu 18.04 LTS de 64 bits. Después de instalar Lazarus en Linux, debe realizar la configuración inicial del compilador FPC, durante la cual se formarán los paquetes de módulos necesarios para compilar la aplicación de Windows.

    Para hacer esto, siga la siguiente secuencia de comandos.

    Nota: El script de configuración se ejecuta con privilegios de root, por lo que al final del proceso no olvide salir del modo root (cerrando la ventana del terminal o presionando Ctrl + D).

    sudo –i
    export FPCVER="3.2.0"
    cd /usr/share/fpcsrc/"$FPCVER"/
    make clean all OS_TARGET=win64 CPU_TARGET=x86_64
    make clean all OS_TARGET=win32 CPU_TARGET=i386
    make crossinstall OS_TARGET=win64 CPU_TARGET=x86_64 INSTALL_PREFIX=/usr
    make crossinstall OS_TARGET=win32 CPU_TARGET=i386 INSTALL_PREFIX=/usr
    ln -sf /usr/lib/fpc/"$FPCVER"/ppcrossx64 /usr/bin/ppcrossx64
    ln -sf /usr/lib/fpc/"$FPCVER"/ppcross386 /usr/bin/ppcross386

    La variable FPCVER establecida al comienzo del script debe coincidir con la versión de FPC que está utilizando. Como escribimos anteriormente, nuestro entorno usa FPC 3.2.0. Puede comprobar la versión de FPC que está utilizando abriendo Acerca de ventana de Lázaro.

    Características de la compilación cruzada UniDAC

    Aquí no describiremos en detalle la instalación de los componentes UniDAC en Lazarus, ya que este proceso no causa ninguna dificultad y se describe en la documentación: https://docs.devart.com/unidac/installation_unidac.htm.

    En el proyecto de demostración, utilizamos UniDAC Professional Edition con la versión de código fuente 9.1. En nuestro entorno, los componentes de UniDAC se instalan en una carpeta ~/Documents/UniDAC/.

    Centrémonos en algunos puntos que, por un lado, son UniDAC "internos" y no deberían molestar particularmente al usuario, pero por otro lado son importantes para comprender las características de compilación y compilación cruzada del proyecto. con UniDAC.

    Primero, UniDAC tiene un motor SQLite integrado que se usa para trabajar con bases de datos SQLite directamente, sin el uso de una biblioteca de cliente, y también tiene una función de cifrado de base de datos integrada. Dados los módulos UniDAC, este motor es un bloque precompilado para diferentes plataformas ubicado en una carpeta ~/Documents/UniDAC/Source/sqlite3/.

    Nota: Tenga en cuenta la ruta a esta carpeta. Lo necesitaremos más tarde.

    Cuando finalmente se construye el proyecto, el compilador asocia estáticamente el bloque precompilado para la plataforma de destino requerida con el archivo de la aplicación.

    Por lo tanto, los módulos SQLite precompilados utilizan muchas funciones estándar del sistema operativo (E/S, etc.). Se tomarán directamente de las bibliotecas del sistema operativo si ha compilado una aplicación de Windows en un entorno de Windows. Pero, en el caso de construir una aplicación de Windows en Linux, el compilador puede necesitar bibliotecas adicionales. Estas bibliotecas para plataformas Windows de 32 y 64 bits vienen con UniDAC y están ubicadas en las carpetas respectivamente ~/Documents/UniDAC/Lib/Lazarus1/i386-win32/ y ~/Documents/UniDAC/Lib/Lazarus1/x86_64-win64/.

    También necesitaremos estas carpetas para futuras acciones.

    Crear un proyecto y configurar los ajustes de compilación cruzada

    No nos detendremos directamente en el proceso de desarrollo de una aplicación utilizando UniDAC, sino que nos centraremos en configurar el proyecto y prepararlo para compilarlo para la plataforma Windows.

    Supongamos que tenemos un proyecto llamado proyecto1, que en nuestro caso está almacenado en una carpeta ~/Documents/test/.

    Primero, configure los parámetros generales necesarios del proyecto. Para hacer esto, abra la configuración del proyecto (menú El proyecto > Parámetros del proyecto ... o usa un atajo de teclado Ctrl + Mayús + F11) E ir a Configuración del compilador > Formas.

    En la sección anterior, hablamos sobre los módulos del motor SQLite precompilados que se incluyen en UniDAC y se ubican en una carpeta ~/Documents/UniDAC/Source/sqlite3/.

    La ruta a la carpeta con estos módulos debe agregarse al archivo Otros archivos de bloque campo. Los pasos ya realizados son suficientes para compilar con éxito un proyecto para la plataforma Linux. Verifiquemos la compilación seleccionando Huir > Construir elemento del menú o presionando un botón Cambio + F9 atajo de teclado.

    Pasemos al siguiente paso: configurar un proyecto para la compilación cruzada. Primero, creemos modos de compilación separados para plataformas Windows de 32 y 64 bits. Para hacer esto, abra la ventana de modos haciendo clic en el botón de dos puntos en la parte superior de la ventana de configuración del proyecto.

    En el cuadro de diálogo que aparece, agregue dos modos: Win64 y Win32 para Windows de 64 bits y Windows de 32 bits, respectivamente.

    Activemos el modo Win64 y cerremos el cuadro de diálogo.

    Después de eso en Formas sección de configuración del proyecto, en bibliotecas campo, debe especificar la ruta a las bibliotecas de Windows adicionales que mencionamos en la sección anterior. Para el modo Win64, esta es la ruta de la carpeta ~/Documents/UniDAC/Lib/Lazarus1/x86_64-win64/.

    El siguiente paso es instalar la plataforma de destino. En la sección de configuración del proyecto Configuración y propósito y SO de destino campo, especificar Win64 plataforma. У La familia objetivo de procesadores campo, especificar x86_64 familia de procesadores.

    Observe la advertencia en la parte inferior de la ventana. Establece que el marco LCL estándar gtk2 no se puede utilizar para compilar aplicaciones para la plataforma Windows. Ir Adiciones y redefiniciones sección de configuración y seleccione ganar32 valor en el conjunto «Tipo de widget LCL'' la lista desplegable.

    En la línea añadida LCLWidgetType: = win32marque las casillas para ambos modos de compilación, Win64 y Win32, para evitar volver a este paso al configurar un proyecto para una plataforma Windows de 32 bits.

    Esto completa la configuración del proyecto de compilación para la plataforma Windows de 64 bits. Verificamos la corrección de las acciones cumplidas y hacemos el proyecto (el menú Huir > Construir o atajo de teclado Cambio + F9).

    Configure el proyecto de compilación para la plataforma Windows de 32 bits de la misma manera que se describe anteriormente. Establezca el modo de compilación activo de Win32 en Formas sección de configuración del proyecto en bibliotecas campo, especifique la ruta a bibliotecas adicionales de Windows: ~/Documents/UniDAC/Lib/Lazarus1/i386-win32/.

    У Configuración y propósito sección de configuración del proyecto, en SO de destino campo, especificar Win32 plataforma y en La familia objetivo de procesadores campo - familia de procesadores i386.

    No es necesario configurar LCLWidgetType como hicimos antes. Compruebe la configuración correcta.

    Como resultado, tenemos la capacidad de desarrollar aplicaciones utilizando UniDAC en Lazarus para Linux y compilarlas para plataformas Linux y Windows en un solo entorno de desarrollo sin el uso de herramientas adicionales.

    Con suerte, este artículo proporcionará respuestas a muchas preguntas anteriores relacionadas con la compilación cruzada en Lazarus.

    Artículos de interés

    Subir