(2) Domine el uso más básico del servidor Linux: programa C/C++ simple y compilación de proyectos en Linux

1. Biblioteca estática y biblioteca dinámica. 

 

 Biblioteca estática : una biblioteca estática es un archivo de biblioteca compilado en el que el código está vinculado al programa durante la compilación, por lo que formará un archivo ejecutable independiente junto con el programa. Cada programa que utilice una biblioteca estática tendrá su propia copia de la biblioteca, lo que puede provocar un desperdicio de memoria. Ventajas de los sufijos comunes (.a)
:
·Independencia: el código de la biblioteca estará vinculado estáticamente al programa, lo que hará que el programa sea independiente y pueda ejecutarse de forma independiente.
·Control de versiones: El código de la biblioteca está integrado en el programa y no se ve afectado por la versión de la biblioteca externa.
Desventajas:
·Desperdicio de memoria: Cada programa que utiliza una biblioteca estática tendrá una copia de la biblioteca, lo que puede resultar en un desperdicio de memoria.
·La actualización es difícil: actualizar la biblioteca requiere recompilar todo el programa, y ​​la implementación y el mantenimiento serán relativamente complicados.

Biblioteca dinámica : es un archivo de biblioteca compilado cuyo código el sistema operativo carga en la memoria cuando el programa se está ejecutando.
Varios programas pueden compartir instancias de la misma biblioteca dinámica, lo que reduce el uso de memoria y mejora la eficiencia de ejecución del programa. Los archivos de biblioteca dinámica generalmente tienen un sufijo .so (objeto compartido) y son un componente compartido que se carga dinámicamente en tiempo de ejecución.
Ventajas:
Eficiencia de la memoria: varios programas pueden compartir instancias del mismo archivo de biblioteca, lo que reduce el uso de la memoria.
Actualización y mantenimiento: las actualizaciones de la biblioteca solo requieren reemplazar los archivos de la biblioteca y no requieren volver a compilar todo el programa.
Flexibilidad: el programa puede cargar y descargar bibliotecas dinámicamente, mejorando la flexibilidad y la mantenibilidad del programa.
Desventajas:
Dependencia del tiempo de ejecución: el programa requiere soporte de biblioteca dinámica cuando se ejecuta. Si falta el archivo de la biblioteca, el programa no se ejecutará.
Complejidad de la implementación: es necesario garantizar que la versión correcta de la biblioteca dinámica esté disponible en el sistema de destino.

2. Compilación e instalación del código fuente del software.

Verifique las herramientas de compilación:
antes de comenzar la compilación, asegúrese de que las herramientas necesarias para la compilación, como compiladores (como gcc), herramientas de compilación (como make) y bibliotecas de desarrollo (como libc), estén instaladas en el sistema. Estas herramientas se pueden instalar a través de herramientas de administración de paquetes.
Configure las opciones de compilación:
ingrese al directorio del código fuente y ejecute el script de configuración para configurar las opciones de compilación. Normalmente, puede utilizar el comando ./configure para configurar, pero algunos programas pueden tener su propio script de configuración. Puede utilizar diferentes opciones para habilitar o deshabilitar funciones, especificar la ruta de instalación y más.
Compile el código fuente:
ejecute el comando make para compilar el código fuente. Esto generará el ejecutable y otros archivos necesarios. Este paso es crítico.
Instale el software:
ejecute el comando sudo make install para instalar los archivos compilados en su sistema. Esto copiará los archivos a la ruta de instalación estándar del sistema, generalmente /usr/local.
Si está interesado, puede probar algunos paquetes de instalación sencillos desde Internet.

3. Proceso de compilación de C y C++

Proceso de compilación, varios archivos,

relacionado con gcc

Utilice gcc para compilar:

Método 1, use gcc generación de un solo paso
#Preprocesamiento, genere archivos intermedios (.i)
        gcc -E source.c -o source.i
#Compilar, genere código ensamblador (.s)
        gcc -s source.i -o source. s
#Ensamblar, generar archivo de destino (.o)
        gcc -c source.s -o source.o
#Enlace, generar archivo ejecutable
        gcc source.o -o
método my_program 2. Utilice gcc para conservar los resultados de la compilación intermedia
gcc -save- temps fuente.c -o mi_programa

Opciones de compilación comunes para gcc

El uso completo de gcc se puede ver a través del comando man gcc

Opciones de ruta del archivo de encabezado:
        -I: especifique la ruta de búsqueda para los archivos de encabezado.
Opciones de subprocesos múltiples:
        -pthread: habilita la compatibilidad con subprocesos POSIX.
Opciones de generación de código:
        -fPIC: Genera código independiente de la posición.
        -fno-stack-protector: Desactiva la protección de la pila.
        -fno-exceptions: deshabilita el manejo de excepciones de C++.
Opciones de compilación de la arquitectura de destino:
        -march: especifica la arquitectura de destino, como -march=native.
        -m32: compila para destino de 32 bits.
        -m64: compila para destino de 64 bits.

 Advertencia relacionada:

—Muro: activa la mayoría de las advertencias.
—Error: trata las advertencias como errores.


Uso avanzado de gcc: creación de bibliotecas estáticas y bibliotecas dinámicas:

1. Pasos básicos para crear una biblioteca estática:
        1. Compile archivos fuente para generar archivos de destino (archivos .o):
        gcc -c archivo1.c archivo2.c
        2. Cree bibliotecas estáticas:
        ar rcs libmylib.a archivo1.o archivo2. o
2, Pasos básicos para crear una biblioteca dinámica:
        1. Compile archivos fuente para generar archivos de destino independientes de la ubicación:
        gcc-fPIC-c file1.c file2.c
        2. Cree una biblioteca dinámica:
        gcc -shared -o libmylib.so file1.o file2. oTenga en cuenta
        que debe agregar la opción -PIC al crear una biblioteca dinámica para generar código independiente de la posición para que pueda cargarse en diferentes direcciones de memoria.

4. hacer comando

make es una herramienta de compilación automatizada que gestiona el proceso de compilación y compilación del código fuente. Puede determinar automáticamente qué archivos deben volver a compilarse en función de reglas y dependencias, lo que hace que todo el proceso de compilación sea más eficiente y automatizado. make utiliza un archivo de texto llamado Makefile para describir las reglas de compilación y construcción.

Archivo Make:

Makefile define cómo compilar el código fuente, cómo generar archivos objeto y cómo generar el archivo ejecutable o biblioteca final. Los Makefiles utilizan una sintaxis similar a un script que contiene objetivos, dependencias y comandos.

Conceptos básicos de Makefile:
        Destino: El destino es un nombre en el Makefile que representa el archivo u operación que desea crear. Los objetivos pueden ser archivos ejecutables, archivos de biblioteca, pseudoobjetivos (utilizados para realizar operaciones específicas, como limpiar archivos), etc.
        Dependencias: cada objetivo puede tener cero o más dependencias, que representan otros archivos u objetivos necesarios para generar el objetivo. Las dependencias le indican a make qué archivos deben actualizarse o regenerarse antes de construir el destino.
        Reglas (Ruls): las reglas definen el proceso de cómo generar archivos de destino a partir de dependencias. Las reglas incluyen objetivos, dependencias y comandos de compilación.
        Comandos: un comando es una serie de pasos definidos en una regla que se utilizan para generar objetivos a partir de dependencias. El comando generalmente comienza con Tab y enumera la compilación, vinculación y otras operaciones reales.
        Variables: las variables se utilizan para almacenar y transferir valores, lo que hace que el Makefile sea más fácil de mantener. Puede utilizar variables para almacenar opciones del compilador, listas de archivos fuente y más.
        Comentarios: los comentarios se utilizan para agregar instrucciones al Makefile para que otros puedan comprender el proceso y las reglas de compilación.

Ejemplo de contenido de Makefile:

CC=gcc
CFLAGS =-Wall
myprogram: main.c   utils.c
        $(CC)$(CFLAGS)-o myprogram main.c
utils.c
clean:
        rm -f myprogram 

Comandos comunes para make:

make-f: se utiliza para especificar un Makefile con un nombre diferente al predeterminado para realizar la operación de compilación.
make-j N: compila utilizando múltiples tareas paralelas, donde N es el número de tareas paralelas. Por ejemplo, make-j4 utilizará 4
tareas para construir en paralelo.
make-C dir: ejecuta el comando make en el directorio especificado. Por ejemplo, make-C src realizará la compilación en el directorio src.
make -B o make --always-make: fuerza una reconstrucción del objetivo, incluso si el objetivo ya está actualizado. Esto resulta útil en situaciones en las que se requiere una reconstrucción forzada.

cmake、gmake、qmake:

CMake (requiere instalación) es una herramienta de compilación multiplataforma que se utiliza para generar archivos de compilación (como Makefiles, proyectos de Visual Studio, etc.) para diferentes compiladores y sistemas operativos. Utilice un lenguaje similar a un script para describir el proceso de compilación del proyecto y generar los archivos de compilación correspondientes. Una ventaja importante de CMake es que puede generar archivos de compilación necesarios para muchos sistemas de compilación diferentes.
gmake (GNU make) también existe en diferentes sistemas operativos, pero es posible que sea necesario modificar su Makefile en diferentes plataformas para adaptarse a diferentes compiladores y sistemas operativos.
qmake es una herramienta de compilación incluida con el marco Qt y se utiliza para generar archivos de compilación para proyectos Qt. Utiliza archivos .pro para describir la configuración del proyecto y las reglas de construcción. qmake puede generar Makefiles o archivos de proyecto de Visual Studio para crear proyectos Qt en diferentes plataformas.

5. Errores comunes durante la compilación de software

        Problema de dependencia: faltan las bibliotecas o herramientas dependientes necesarias, lo que provoca que falle el proceso de compilación. Las soluciones incluyen instalar dependencias faltantes, actualizar versiones o especificar rutas de dependencia correctas.
        Error del compilador: el compilador informa errores o advertencias, que pueden deberse a errores de sintaxis, discrepancias de tipos, etc. La solución implica modificar el código fuente para solucionar el problema, asegurando que el código cumpla con las especificaciones del compilador.
        Problema con la ruta de la biblioteca: el compilador no puede encontrar el archivo de biblioteca requerido, posiblemente porque la ruta de la biblioteca no está configurada correctamente. Las soluciones incluyen especificar la ruta correcta de la biblioteca, actualizar los enlaces de la biblioteca, etc.
        Incompatibilidad de versión: el código compilado puede ser incompatible con una versión específica de una biblioteca, compilador o sistema operativo. Las soluciones alternativas pueden implicar actualizar o degradar el software para cumplir con los requisitos de compatibilidad.
        Archivos faltantes o dañados: el código fuente o los archivos dependientes pueden faltar, estar dañados o descargarse de forma incompleta, lo que provoca que la compilación falle. Las soluciones incluyen volver a descargar archivos, reparar archivos dañados, etc.

……

6. Introducción a los conceptos básicos de conda.

conda es una herramienta de gestión de entornos y gestión de paquetes de código abierto, que se utiliza principalmente en campos como la ciencia de datos, el aprendizaje automático y la informática científica. Permite a los usuarios crear, administrar y compartir fácilmente diferentes entornos virtuales, así como instalar y administrar diferentes versiones de paquetes y bibliotecas de software.
Conda fue originalmente parte de la distribución Anaconda y luego se usó ampliamente como una herramienta independiente.


1. Gestión de versiones de paquetes : conda permite a los usuarios instalar versiones específicas de paquetes de software y cambiar entre diferentes versiones. Esto es útil para garantizar la coherencia del proyecto en diferentes entornos y plataformas.
2. Gestión del entorno : conda admite la creación y gestión de entornos virtuales independientes. Cada entorno puede tener sus propias dependencias, configuración y versión de Python. Esto facilita la gestión de varios proyectos simultáneamente en la misma máquina.
3. Integración del entorno virtual : conda puede crear y administrar entornos virtuales, pero también puede integrarse con otras herramientas de entornos virtuales (como virtualenv) para proporcionar una mayor flexibilidad.

Comandos básicos para conda:
Crear un entorno virtual: conda create --name myenv
Activar o ingresar a un entorno virtual: conda enable myenv

Instalar paquetes en un entorno virtual: conda install numpy
Listar paquetes instalados: conda list
Desinstalar paquetes :conda remove numpy
salir de entorno virtual: conda desactivar

Elimine el entorno virtual: primero ejecute el comando para salir del entorno virtual y luego ejecute conda env remove --name nombre del entorno virtual.
Cree un archivo de configuración del entorno: conda env export > Environment.yml
Cree un entorno a partir de un archivo de configuración: conda env create -f Environment.yml

La ruta del entorno virtual que creé: /home/server name/anaconda3/envs/environment name. Puede
ver información de ayuda más detallada a través de conda-help o conda<subcommand>-help 

De manera similar , virtualenv es una herramienta muy útil, especialmente adecuada para entornos de desarrollo de múltiples proyectos: hace que el desarrollo de proyectos Python sea más flexible, confiable y mantenible al aislar entornos, administrar dependencias y proporcionar versiones independientes de Python.

Supongo que te gusta

Origin blog.csdn.net/weixin_48060069/article/details/132276001
Recomendado
Clasificación