El documento describe los diferentes tipos de archivos complementarios que se utilizan en aplicaciones Windows, incluyendo bibliotecas estáticas (.lib), bibliotecas dinámicas (.dll), drivers (.drv, .sys) y drivers virtuales (.vxd). También explica cómo las aplicaciones pueden enlazarse con bibliotecas estáticas mediante la inclusión del archivo .lib y con bibliotecas dinámicas mediante la carga del archivo .dll en tiempo de ejecución.
Este documento describe el proceso de instalación y prueba de paquetes de código abierto para realidad aumentada. Se instalaron dependencias como OpenCV y GLUT, y paquetes como ARToolKit. Se compiló con éxito el ejemplo simpleTest.c usando un archivo Makefile. El script .sh permitió ejecutar el programa compilado y detectar con éxito un marcador usando la cámara web.
Este documento presenta un tutorial introductorio sobre Python. Explica brevemente qué es Python, por qué es un lenguaje popular, cómo instalarlo e incluye un ejemplo de "Hola Mundo". Luego procede a explicar conceptos básicos de Python como tipos de datos, controles de flujo, orientación a objetos, módulos, entre otros temas. El documento parece estar dirigido a principiantes con el objetivo de enseñar los fundamentos del lenguaje Python de una manera simple y didáctica.
El documento describe la estructura básica de un programa en C++, incluyendo las directivas de preprocesador, la función principal main(), declaraciones de variables globales, tipos de datos básicos y cabeceras de funciones. Explica conceptos como bibliotecas, prototipos de funciones, y el uso de instrucciones dentro del cuerpo de una función.
El documento describe la estructura básica de un programa en C++, incluyendo la cabecera con las bibliotecas incluidas, las declaraciones de variables globales, la función principal y otras funciones, así como las instrucciones dentro del cuerpo de cada función.
Este documento describe la estructura básica de un programa en C++. Un programa en C++ típicamente incluye archivos de cabecera, declaraciones de variables globales, una función principal y otras funciones secundarias. La función principal contiene el cuerpo principal del programa, que puede incluir instrucciones declarativas, de entrada/salida, repetitivas y condicionales. Las funciones secundarias realizan tareas específicas y devuelven valores.
Este documento proporciona una introducción a C++, describiendo conceptos como programación orientada a objetos, clases, objetos, encapsulación, polimorfismo, herencia, constructores y destructores. Explica las diferencias entre C y C++ y ofrece ejemplos de cómo crear clases, objetos y usar funciones miembro. También cubre temas como entrada/salida por consola y formato de salida.
Python es un lenguaje de programación de código abierto, de alto nivel y multiplataforma que permite la creación de scripts y programas complejos de manera fácil. Ofrece tipos de datos, módulos reutilizables, y una gran cantidad de librerías para trabajar con datos geoespaciales y SIG, incluyendo la manipulación de shapefiles y raster a través de bibliotecas como Shapely y GDAL.
El documento describe los archivos de cabecera en lenguaje C, los cuales contienen declaraciones de funciones, clases y variables que pueden ser incluidas en otros archivos fuente mediante la instrucción #include. Se mencionan algunos archivos de cabecera comunes como stdio.h para entrada/salida, string.h para cadenas, y time.h para funciones de fecha.
Este documento describe el proceso de instalación y prueba de paquetes de código abierto para realidad aumentada. Se instalaron dependencias como OpenCV y GLUT, y paquetes como ARToolKit. Se compiló con éxito el ejemplo simpleTest.c usando un archivo Makefile. El script .sh permitió ejecutar el programa compilado y detectar con éxito un marcador usando la cámara web.
Este documento presenta un tutorial introductorio sobre Python. Explica brevemente qué es Python, por qué es un lenguaje popular, cómo instalarlo e incluye un ejemplo de "Hola Mundo". Luego procede a explicar conceptos básicos de Python como tipos de datos, controles de flujo, orientación a objetos, módulos, entre otros temas. El documento parece estar dirigido a principiantes con el objetivo de enseñar los fundamentos del lenguaje Python de una manera simple y didáctica.
El documento describe la estructura básica de un programa en C++, incluyendo las directivas de preprocesador, la función principal main(), declaraciones de variables globales, tipos de datos básicos y cabeceras de funciones. Explica conceptos como bibliotecas, prototipos de funciones, y el uso de instrucciones dentro del cuerpo de una función.
El documento describe la estructura básica de un programa en C++, incluyendo la cabecera con las bibliotecas incluidas, las declaraciones de variables globales, la función principal y otras funciones, así como las instrucciones dentro del cuerpo de cada función.
Este documento describe la estructura básica de un programa en C++. Un programa en C++ típicamente incluye archivos de cabecera, declaraciones de variables globales, una función principal y otras funciones secundarias. La función principal contiene el cuerpo principal del programa, que puede incluir instrucciones declarativas, de entrada/salida, repetitivas y condicionales. Las funciones secundarias realizan tareas específicas y devuelven valores.
Este documento proporciona una introducción a C++, describiendo conceptos como programación orientada a objetos, clases, objetos, encapsulación, polimorfismo, herencia, constructores y destructores. Explica las diferencias entre C y C++ y ofrece ejemplos de cómo crear clases, objetos y usar funciones miembro. También cubre temas como entrada/salida por consola y formato de salida.
Python es un lenguaje de programación de código abierto, de alto nivel y multiplataforma que permite la creación de scripts y programas complejos de manera fácil. Ofrece tipos de datos, módulos reutilizables, y una gran cantidad de librerías para trabajar con datos geoespaciales y SIG, incluyendo la manipulación de shapefiles y raster a través de bibliotecas como Shapely y GDAL.
El documento describe los archivos de cabecera en lenguaje C, los cuales contienen declaraciones de funciones, clases y variables que pueden ser incluidas en otros archivos fuente mediante la instrucción #include. Se mencionan algunos archivos de cabecera comunes como stdio.h para entrada/salida, string.h para cadenas, y time.h para funciones de fecha.
Este documento presenta una introducción a Python. En 3 oraciones o menos:
El documento introduce Python como un lenguaje de programación interpretado, de tipado dinámico y fuerte, multiplataforma y orientado a objetos. Explica brevemente los tipos de datos en Python como números, cadenas, vectores y otros, y proporciona ejemplos de código. Además, compara Python con C y Java con el ejemplo "Hola Mundo" y explica cómo instalar Python en diferentes sistemas operativos.
Este documento describe los decompiladores, que son programas que realizan la operación inversa de un compilador para obtener el código fuente de un programa compilado. Explica que la decompilación puede ser útil para arreglar errores, encontrar vulnerabilidades, aprender o mejorar un programa. Sin embargo, la mayoría de las licencias de software propietario prohíben la decompilación. Aun así, en algunos casos es legal y posible decompilar programas escritos en lenguajes como Java, .NET y Flash. Es más difícil decompilar C/C++ debido a
Este documento describe los archivos de cabecera más utilizados en los lenguajes de programación C y C++. Explica que los archivos de cabecera declaran funciones estándar y son incluidos automáticamente por el compilador. Luego enumera algunos de los archivos de cabecera más comunes como stdio.h para entrada y salida, string.h para el manejo de cadenas, y math.h para funciones matemáticas.
Este documento describe el uso de computación paralela y distribuida a través de una red de computadoras conocida como Grid. Explica cómo herramientas como MPI y el Globus Toolkit permiten ejecutar aplicaciones paralelas en múltiples máquinas de forma coordinada. También presenta ejemplos de cómo programar aplicaciones MPI para usar los servicios del Globus Toolkit y ejecutar en una red Grid.
Este documento presenta información sobre la dirección y coordinación general de la revista, así como sobre el diseño y maquetación. Explica que la edición se realizó de forma integral usando software libre. También incluye artículos sobre la importancia de la disciplina y sobre el uso de herramientas C++ en Linux para el desarrollo de software.
Este documento presenta una introducción a Python. Explica que Python fue creado por Guido van Rossum y que es un lenguaje de programación muy legible y poderoso a pesar de ser minimalista. También describe algunas características clave de Python como su sintaxis basada en tabulación, su capacidad multiplataforma y su amplia biblioteca estándar.
Este documento describe diferentes tipos de bibliotecas en C++, incluyendo bibliotecas estándar como iostream y math, bibliotecas definidas por el programador, y el uso de prototipos y llamadas a funciones. También explica conceptos como el namespace std y ejemplos de uso común de bibliotecas.
Python es un lenguaje de programación dinámico e interpretado que ofrece tipado dinámico, fuerte tipado, flexibilidad y portabilidad. Sus principales características incluyen una sintaxis limpia y legible similar al pseudocódigo, una amplia biblioteca estándar y ser multiplataforma. Python se puede utilizar para el desarrollo web, bases de datos, software, juegos, bioinformática, física y educación.
El documento describe las estructuras básicas para programar en C++, incluyendo la estructura básica de un programa con funciones, directivas de preprocesador y la función main. También describe los tipos de datos básicos como enteros, flotantes, caracteres y lógicos, así como estructuras de datos compuestas como structs, unions y clases para organizar los datos. Finalmente, explica las matrices dinámicas y la estructura básica de un programa C++ sin orientación a objetos.
El documento describe la estructura básica de un programa en C++. Explica que un programa debe incluir cabeceras, declarar variables globales, contener una función principal llamada main, y definir el cuerpo del programa dentro de llaves. También define conceptos como archivos de cabecera, declaración de variables, cabecera de función, tipos de instrucciones y funciones.
Este documento describe el desarrollo de un compilador mediante el uso de JFlex y CUP para analizar léxicamente y sintácticamente expresiones matemáticas. Se presenta el código para el analizador léxico creado con JFlex, el cual identifica tokens como números, variables, operadores y más. Luego, se muestra el código para el analizador sintáctico creado con CUP, el cual verifica que la sintaxis de las expresiones matemáticas ingresadas sea correcta de acuerdo a las reglas definidas. Finalmente,
Mini clase Intro Programación Python UTN Profesorado 2015Mariano Reingart
Introducción a la programación de computadoras con Python
Presentación del lenguaje de programación Python
Motivaciones y estudios relacionados
Descargas - Instalación
Estructuras básicas (condicionales, ciclos, funciones)
Demostración
Feedback
Bonus track (trabajo de los alumnos con raspberry pi, desarrollo web, niños)
Este documento discute las opciones para integrar código C++ con Python. Explica que Python es útil para productividad mientras que C++ es mejor para desempeño. Presenta opciones como Python/C API, Cython, SWIG y Boost para crear interfaces entre los lenguajes. Recomienda que SWIG es popular pero que Boost es mejor para ambientes C++, aunque requiere más conocimiento de C++. Finalmente, enfatiza que Python y C++ pueden trabajar juntos de forma efectiva.
El documento describe los pasos para escribir un programa en C++. Estos incluyen 1) escribir pseudocódigo, 2) editar el código fuente, 3) compilar el código, y 4) detectar y corregir errores. También explica la estructura general de un programa en C++, la cual incluye funciones como main(), directivas como #include, y elementos como comentarios y sentencias. Finalmente, describe elementos clave del preprocesador como las directivas #include, #define y using namespace.
1) El documento presenta un manual básico de programación en C++. 2) Explica los conceptos básicos de programación orientada a objetos como clases, objetos, mensajes, herencia y polimorfismo. 3) También cubre temas como tipos de datos abstractos, compilación de programas, entrada y salida de flujos en C++, y ejemplos de código.
Python es un popular lenguaje de programación dinámico que se remonta a finales de los 80. Es de propósito general pero se usa comúnmente para scripts. Es de código abierto, de alto nivel, portable e interpretado. Se puede instalar desde python.org y tiene características como tipos de datos simples, estructuras de control como if/else y bucles, funciones, y aplicaciones populares como YouTube y la NASA.
El documento describe la estructura básica de un programa en C++. Todo programa debe incluir archivos de cabecera, declarar variables globales, contener una función principal llamada main, e incluir el cuerpo del programa dentro de llaves. Las funciones se definen indicando su tipo de retorno, nombre, parámetros y bloque de instrucciones entre llaves.
1) El documento describe la creación y gestión de procesos e hilos en Linux. Incluye ejemplos de cómo crear procesos con fork() y hilos con pthread_create(), y cómo comunicarlos y sincronizarlos con wait(), exit(), join() y otras funciones.
2) También explica conceptos básicos como los identificadores de proceso (pid), la estructura jerárquica de procesos, y cómo los procesos e hilos comparten y gestionan la memoria de forma independiente.
3) Finalmente, propone actividades prácticas
El documento describe la estructura básica de un programa en C++, incluyendo las directivas del preprocesador, la función principal main(), y los tipos de datos básicos como enteros, reales, caracteres y lógicos.
El documento describe la estructura básica de un programa en C++, incluyendo las directivas del preprocesador, la función principal main(), y los tipos de datos básicos como enteros, reales, caracteres y lógicos.
Este documento presenta una introducción a Python. En 3 oraciones o menos:
El documento introduce Python como un lenguaje de programación interpretado, de tipado dinámico y fuerte, multiplataforma y orientado a objetos. Explica brevemente los tipos de datos en Python como números, cadenas, vectores y otros, y proporciona ejemplos de código. Además, compara Python con C y Java con el ejemplo "Hola Mundo" y explica cómo instalar Python en diferentes sistemas operativos.
Este documento describe los decompiladores, que son programas que realizan la operación inversa de un compilador para obtener el código fuente de un programa compilado. Explica que la decompilación puede ser útil para arreglar errores, encontrar vulnerabilidades, aprender o mejorar un programa. Sin embargo, la mayoría de las licencias de software propietario prohíben la decompilación. Aun así, en algunos casos es legal y posible decompilar programas escritos en lenguajes como Java, .NET y Flash. Es más difícil decompilar C/C++ debido a
Este documento describe los archivos de cabecera más utilizados en los lenguajes de programación C y C++. Explica que los archivos de cabecera declaran funciones estándar y son incluidos automáticamente por el compilador. Luego enumera algunos de los archivos de cabecera más comunes como stdio.h para entrada y salida, string.h para el manejo de cadenas, y math.h para funciones matemáticas.
Este documento describe el uso de computación paralela y distribuida a través de una red de computadoras conocida como Grid. Explica cómo herramientas como MPI y el Globus Toolkit permiten ejecutar aplicaciones paralelas en múltiples máquinas de forma coordinada. También presenta ejemplos de cómo programar aplicaciones MPI para usar los servicios del Globus Toolkit y ejecutar en una red Grid.
Este documento presenta información sobre la dirección y coordinación general de la revista, así como sobre el diseño y maquetación. Explica que la edición se realizó de forma integral usando software libre. También incluye artículos sobre la importancia de la disciplina y sobre el uso de herramientas C++ en Linux para el desarrollo de software.
Este documento presenta una introducción a Python. Explica que Python fue creado por Guido van Rossum y que es un lenguaje de programación muy legible y poderoso a pesar de ser minimalista. También describe algunas características clave de Python como su sintaxis basada en tabulación, su capacidad multiplataforma y su amplia biblioteca estándar.
Este documento describe diferentes tipos de bibliotecas en C++, incluyendo bibliotecas estándar como iostream y math, bibliotecas definidas por el programador, y el uso de prototipos y llamadas a funciones. También explica conceptos como el namespace std y ejemplos de uso común de bibliotecas.
Python es un lenguaje de programación dinámico e interpretado que ofrece tipado dinámico, fuerte tipado, flexibilidad y portabilidad. Sus principales características incluyen una sintaxis limpia y legible similar al pseudocódigo, una amplia biblioteca estándar y ser multiplataforma. Python se puede utilizar para el desarrollo web, bases de datos, software, juegos, bioinformática, física y educación.
El documento describe las estructuras básicas para programar en C++, incluyendo la estructura básica de un programa con funciones, directivas de preprocesador y la función main. También describe los tipos de datos básicos como enteros, flotantes, caracteres y lógicos, así como estructuras de datos compuestas como structs, unions y clases para organizar los datos. Finalmente, explica las matrices dinámicas y la estructura básica de un programa C++ sin orientación a objetos.
El documento describe la estructura básica de un programa en C++. Explica que un programa debe incluir cabeceras, declarar variables globales, contener una función principal llamada main, y definir el cuerpo del programa dentro de llaves. También define conceptos como archivos de cabecera, declaración de variables, cabecera de función, tipos de instrucciones y funciones.
Este documento describe el desarrollo de un compilador mediante el uso de JFlex y CUP para analizar léxicamente y sintácticamente expresiones matemáticas. Se presenta el código para el analizador léxico creado con JFlex, el cual identifica tokens como números, variables, operadores y más. Luego, se muestra el código para el analizador sintáctico creado con CUP, el cual verifica que la sintaxis de las expresiones matemáticas ingresadas sea correcta de acuerdo a las reglas definidas. Finalmente,
Mini clase Intro Programación Python UTN Profesorado 2015Mariano Reingart
Introducción a la programación de computadoras con Python
Presentación del lenguaje de programación Python
Motivaciones y estudios relacionados
Descargas - Instalación
Estructuras básicas (condicionales, ciclos, funciones)
Demostración
Feedback
Bonus track (trabajo de los alumnos con raspberry pi, desarrollo web, niños)
Este documento discute las opciones para integrar código C++ con Python. Explica que Python es útil para productividad mientras que C++ es mejor para desempeño. Presenta opciones como Python/C API, Cython, SWIG y Boost para crear interfaces entre los lenguajes. Recomienda que SWIG es popular pero que Boost es mejor para ambientes C++, aunque requiere más conocimiento de C++. Finalmente, enfatiza que Python y C++ pueden trabajar juntos de forma efectiva.
El documento describe los pasos para escribir un programa en C++. Estos incluyen 1) escribir pseudocódigo, 2) editar el código fuente, 3) compilar el código, y 4) detectar y corregir errores. También explica la estructura general de un programa en C++, la cual incluye funciones como main(), directivas como #include, y elementos como comentarios y sentencias. Finalmente, describe elementos clave del preprocesador como las directivas #include, #define y using namespace.
1) El documento presenta un manual básico de programación en C++. 2) Explica los conceptos básicos de programación orientada a objetos como clases, objetos, mensajes, herencia y polimorfismo. 3) También cubre temas como tipos de datos abstractos, compilación de programas, entrada y salida de flujos en C++, y ejemplos de código.
Python es un popular lenguaje de programación dinámico que se remonta a finales de los 80. Es de propósito general pero se usa comúnmente para scripts. Es de código abierto, de alto nivel, portable e interpretado. Se puede instalar desde python.org y tiene características como tipos de datos simples, estructuras de control como if/else y bucles, funciones, y aplicaciones populares como YouTube y la NASA.
El documento describe la estructura básica de un programa en C++. Todo programa debe incluir archivos de cabecera, declarar variables globales, contener una función principal llamada main, e incluir el cuerpo del programa dentro de llaves. Las funciones se definen indicando su tipo de retorno, nombre, parámetros y bloque de instrucciones entre llaves.
1) El documento describe la creación y gestión de procesos e hilos en Linux. Incluye ejemplos de cómo crear procesos con fork() y hilos con pthread_create(), y cómo comunicarlos y sincronizarlos con wait(), exit(), join() y otras funciones.
2) También explica conceptos básicos como los identificadores de proceso (pid), la estructura jerárquica de procesos, y cómo los procesos e hilos comparten y gestionan la memoria de forma independiente.
3) Finalmente, propone actividades prácticas
El documento describe la estructura básica de un programa en C++, incluyendo las directivas del preprocesador, la función principal main(), y los tipos de datos básicos como enteros, reales, caracteres y lógicos.
El documento describe la estructura básica de un programa en C++, incluyendo las directivas del preprocesador, la función principal main(), y los tipos de datos básicos como enteros, reales, caracteres y lógicos.
El documento describe la estructura básica de un programa en C++. Un programa en C++ consta de directivas de preprocesador, declaraciones globales, una función principal y otras funciones auxiliares. Cada función contiene una secuencia de declaraciones e instrucciones entre llaves. El documento también explica los tipos de datos básicos en C++ como enteros, reales, caracteres y lógicos.
Este documento describe la estructura básica de un programa en C++. Un programa típico en C++ incluye bibliotecas de cabecera, declaraciones de variables globales, una función principal y el cuerpo del programa dentro de la función principal. La función principal contiene las instrucciones que componen el programa.
.NET UY Meetup 6 - Integrando con C/C++ por medio de P/Invoke by Juan Ramirez.NET UY Meetup
Este documento describe Platform Invocation Services (P/Invoke), que permite ejecutar código nativo no administrado desde .NET. P/Invoke permite interoperar con APIs nativas existentes sin modificar su código fuente. El documento explica cómo usar atributos como DllImport para invocar funciones externas y cómo tratar los tipos de datos y estructuras entre espacios de nombres administrados y no administrados.
El documento describe la estructura básica de un programa en C++, incluyendo funciones, directivas de preprocesador, declaraciones globales, la función main, tipos de datos básicos como enteros, flotantes y caracteres, y el proceso de compilación y ejecución de un programa C++.
El documento describe la estructura básica de un programa en C++, incluyendo funciones, directivas de preprocesador, declaraciones globales, la función main, tipos de datos básicos como enteros, flotantes y caracteres, y el proceso de compilación y ejecución de un programa C++.
La estructura básica de un programa en C++ incluye directivas de preprocesador, declaraciones globales como variables y funciones, la función principal main(), y otras funciones. Los tipos de datos básicos en C++ son enteros, reales, caracteres y lógicos.
La estructura básica de un programa en C++ incluye directivas de preprocesador, declaraciones globales como variables y funciones, la función principal main y otras funciones. Los tipos de datos básicos en C++ son enteros, reales, caracteres y lógicos. Las bibliotecas se incluyen usando directivas #include y las variables globales pueden ser accedidas por cualquier función.
Este documento describe la estructura básica de un programa en C++, incluyendo funciones, la función main, tipos de datos, constantes y variables. Explica que una función es un conjunto de instrucciones que realizan una tarea específica y pueden tomar parámetros, y que la función main es el punto de entrada al programa. Además, detalla los tipos de datos básicos como enteros, flotantes y caracteres, y cómo las variables y constantes almacenan valores en la memoria.
Este documento describe cómo crear procesos y hilos en C utilizando las bibliotecas fork(), pthread.h y otras funciones del sistema operativo Linux. Explica cómo medir el tiempo de creación de procesos y hilos, pasar parámetros a las funciones de los hilos, y esperar a que terminen los hilos antes de finalizar el programa principal. El objetivo es comparar el rendimiento de procesos frente a hilos al gestionar tareas concurrentes.
El documento describe la estructura básica de un programa en C++, incluyendo las directivas del preprocesador, la función principal main(), y los tipos de datos básicos como enteros, flotantes y caracteres. Explica que C++ es un lenguaje de programación híbrido diseñado por añadir mecanismos de objetos al lenguaje C.
El documento describe la estructura básica de un programa en C++. Explica que C++ es un lenguaje de programación orientado a objetos diseñado por Bjarne Stroustrup que combina características de C y de lenguajes orientados a objetos. Detalla que un programa en C++ contiene directivas de preprocesador, declaraciones globales, la función main y otras funciones, así como los tipos de datos básicos como enteros, flotantes y caracteres.
Un programa C++ básico tiene la siguiente estructura:
1) Incluye bibliotecas estándar como iostream.h usando #include.
2) Declara variables globales y la función principal main().
3) El cuerpo de main() contiene las instrucciones que componen el programa.
El documento describe la estructura básica de un programa en C++, incluyendo las directivas del preprocesador, la función main(), los tipos de datos básicos como enteros y caracteres, y el uso de archivos de cabecera. Explica que todo programa en C++ debe tener una función main() que actúa como punto de entrada, y que las declaraciones y sentencias van dentro de llaves para delimitar los bloques.
El documento describe la estructura básica de un programa en C++, incluyendo las directivas del preprocesador, la función main(), los tipos de datos básicos como enteros y caracteres, y la biblioteca de entrada y salida estándar iostream. Explica que todo programa C++ debe tener una función main() que actúa como punto de entrada, y que el cuerpo del programa, compuesto de declaraciones e instrucciones, va entre llaves.
Extendiendo aplicaciones en C y C++ con PythonAngel Freire
Este documento explica cómo extender aplicaciones en C y C++ usando Python. Detalla la API de CPython que permite interpretar código Python desde otros lenguajes como C y C++. Explica cómo inicializar e interpretar código Python, crear y manipular objetos Python, y manejar la memoria a través del conteo de referencias. Proporciona un ejemplo completo de cómo llamar una función Python desde C++ e imprimir el resultado.
El documento resume conceptos básicos de programación en C como las funciones de los comentarios, la función main, el uso de include y tipos de datos. También presenta ejemplos de código C para solicitar datos de usuario, realizar operaciones matemáticas y mostrar resultados con diferentes formatos de salida.
1. Archivos complementarios a
aplicaciones en Win32
El sistema operativo Windows esta compuesto
por una extensa variedad de módulos
adicionales al “kernel”, entre ellos podemos
encontrar:
• “Drivers” (.drv y .sys)
• “Drivers virtuales” (.vxd)
• Bibliotecas estáticas (.lib)
• Bibliotecas dinámicas (.dll)
2. Bibliotecas estáticas
• Son aquellas que se requieren durante el
tiempo de compilación.
• Generalmente se tienen en un archivo con
extensión .lib y un archivo de encabezado
con extensión .h
• No se requieren en la máquina del “cliente”
para ejecutar un programa, pero generan un
código ejecutable grande.
3. Biblioteca estática
Supóngase que dentro de un programa se desea utilizar una
rutina cuyo código ya fué desarrollado anteriormente, quizás
por alguien que no es el programador actual.
Para hacer esto se requiren tres cosas:
• Conocer los parámetros que requiere y el tipo de dato
que regresa la función (API).
long Multiply2Longs(long l1, long l2);
• Archivo con prototipo de la función.
• Archivo con código intermedio de la función.
4. Aplicación que utiliza biblioteca estática
Supóngase que dentro de un programa se desea utilizar una
rutina cuyo código ya fué desarrollado anteriormente, quizás
por alguien que no es el programador actual.
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
Si solo es necesaria una función,
se puede dejar indicada en vez de
long l1; realizar el #include del archivo.
long l2;
long lResult;
extern "C" long Multiply2Longs(long l1, long l2);
void main() {
//Inclusión explícita: Requiere la inclusión del archivo .LIB
l1=10;
l2=20;
lResult=Multiply2Longs(l1,l2);
printf("Resultado=%dn",lResult);
getchar();
}
6. Código de la biblioteca estática
El código de una biblioteca estática es simple, consiste
únicamente de las rutinas que la componen y su código
interno.
La única consideración que cabe destacar se presenta al compilar
el archivo, esto debido a que no se generará otro archivo con
extensión .exe sino uno con extensión .lib.
7. Código de una biblioteca estática
Al crear el proyecto, se debe especificar que se va
a generar el código para una biblioteca estática.
8. Bibliotecas dinámicas
• Archivos precomilados que pueden
enlazarse al código principal durante la
etapa de ejecución de una aplicación.
• El archivo con extensión DLL se requiere
en la máquina del “cliente” para que pueda
ejecutarse la aplicación.
• Normalmente, los DLLs van al directorio
windowssystem o windowssystem32
10. Aplicación que utiliza DLL
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
HINSTANCE hCodigoDll;
long l1;
long l2;
long lResult;
typedef long (TIPOFUNCION)(long, long);
TIPOFUNCION* pfuncMultiply2Longs=0;
En forma similar al manejo de archivos,
se define una variable que servirá para
abrir el DLL.
11. Aplicación que utiliza DLL
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
HINSTANCE hCodigoDll;
long l1;
long l2;
long lResult;
typedef long (TIPOFUNCION)(long, long);
TIPOFUNCION* pfuncMultiply2Longs=0;
Se define un tipo de dato que deberá corresponder
al prototipo de la función.
Se define un apuntador al tipo de función que se
definió en el párrafo anterior.
12. Aplicación que utiliza DLL
void main() {
//Inclusión implícita: Realiza inclusión dinámica de la biblioteca
if (hCodigoDll =LoadLibrary("dll_test.dll")) {
if (pfuncMultiply2Longs=(TIPOFUNCION*)
GetProcAddress(hCodigoDll ,"Multiply2Longs")) {
l1=10;
l2=20;
lResult=(*pfuncMultiply2Longs)(l1,l2);
printf("Resultado=%dn",lResult);
} else
printf("Error al obtener la dirección del procedimiento!n");
} else
printf("Biblioteca no localizada!n");
FreeLibrary(hModule);
getchar();
} Se “carga” el DLL y se liga
con la variable hModule.
13. Aplicación que utiliza DLL
void main() {
//Inclusión implícita: Realiza inclusión dinámica de la biblioteca
if (hCodigoDll =LoadLibrary("dll_test.dll")) {
if (pfuncMultiply2Longs=(TIPOFUNCION*)
GetProcAddress(hCodigoDll ,"Multiply2Longs")) {
l1=10;
l2=20;
lResult=(*pfuncMultiply2Longs)(l1,l2);
printf("Resultado=%dn",lResult);
} else
printf("Error al obtener la dirección del procedimiento!n");
} else
printf("Biblioteca no localizada!n");
FreeLibrary(hModule);
getchar(); Se busca dentro del DLL la función
} que nos interesa invocar, utilizando
para ello la referencia hModule.
14. Aplicación que utiliza DLL
void main() {
//Inclusión implícita: Realiza inclusión dinámica de la biblioteca
if (hCodigoDll =LoadLibrary("dll_test.dll")) {
if (pfuncMultiply2Longs=(TIPOFUNCION*)
GetProcAddress(hCodigoDll,"Multiply2Longs")) {
l1=10;
l2=20;
lResult=(*pfuncMultiply2Longs)(l1,l2);
printf("Resultado=%dn",lResult);
} else
printf("Error al obtener la dirección del procedimiento!n");
} else
printf("Biblioteca no localizada!n");
FreeLibrary(hModule);
getchar();
} Si la función fué localizada, se liga
con el apuntador pfuncMultiply2Longs.
15. Aplicación que utiliza DLL
void main() {
//Inclusión implícita: Realiza inclusión dinámica de la biblioteca
if (hCodigoDll =LoadLibrary("dll_test.dll")) {
if (pfuncMultiply2Longs=(TIPOFUNCION*)
GetProcAddress(hCodigoDll ,"Multiply2Longs")) {
l1=10;
l2=20;
lResult=(*pfuncMultiply2Longs)(l1,l2);
printf("Resultado=%dn",lResult);
} else
printf("Error al obtener la dirección del procedimiento!n");
} else
printf("Biblioteca no localizada!n");
FreeLibrary(hCodigoDll);
getchar(); Se manda ejecutar el contenido del apuntador
}
pfuncMultiply2Longs, en forma similar a
como se invoca una función.
16. Código de un DLL
//Archivo dll_test.c
#include <windows.h>
#define DllExport __declspec(dllexport)
DllExport long Multiply2Longs(long n1, long n2) {
return(n1*n2);
}
17. Bibliotecas en LINUX
• Existen tres tipos de bibliotecas.
– De enlace estático.
– De enlace dinámico (“shared object”).
• Con enlace implícito: Etiquetadas durante tiempo de
compilación con rutinas implícitamente enlazadas durante
tiempo de ejecución.
• Con enlace explícito: Explícitas en el procedimiento de enlace
y desenlace durante tiempo de ejecución.
• Para soportar el proceso de enlace dinámico el
sistema operativo utiliza un módulo de código
llamado “dynamic linker”.
18. Formatos de código binario
• Todos los tipos de bibliotecas consisten de código binario que debe ser
enlazado al código binario de un programa para su ejecución.
• El vinculador (“linker”) debe realizar un proceso de relocalización de
código cada vez que una biblioteca se enlaza con una aplicación.
• Para que en vinculador (dinámico o estático, cualquiera de ellos)
pueda realizar su función requiere un formato estandarizado de
código; en Linux existen dos:
– COFF (“Common Object File Format”): Utilizado inicialmente pero
descontinuado en la actualidad.
– ELF (“Executable Linkage Format”): Vigente en todas las distribuciones
del sistema operativo.
19. Tablas de símbolos
• Una vez que se realiza el proceso de compilación del código fuente,
se pierden todas las referencias a los nombres de variables y rutinas,
en el código objeto solo quedan referencias a memoria dónde se
localizarían variables y rutinas … pero esto no es útil para el “dynamic
linker” de modo que el proceso de compilación requiere que en el
código binario queden definidas las tablas de símbolos de las
bibliotecas, a esto se le conoce como ABI.
– API (“Application Programmer Interface”).
– ABI (“Application Binary Interface”).
20. Generación de una biblioteca estática
Pasos para generación de una biblioteca estática:
2.Compilar el código fuente:
gcc –Wall –c archUnoBibEstatica.c archDosBibEstatica.c
Lo anterior producirá: archUnoBibEstatica.o y archDosBibEstatica.o
5.Condensar el código objeto de los diferentes archivos que
conformen la biblioteca estática:
ar –cvq libBibEstatica.a archUnoBibEstatica.o
archDosBibEstatica.o
Lo anterior producirá: libBibEstatica.a
8.Enlazar la biblioteca con alguna aplicación que la requiera
(la aplicación requiere la declaración de prototipos o un
archivo de encabezado):
gcc prog.c –L/path/to/lib -lBibEstatica
Lo anterior producirá: a.out
21. Bibliotecas de enlace dinámico
• Los dos tipos de bibliotecas requieren la creación de un código compartido
(“shared object”).
• Este tipo de códigos ofrecen diversas ventajas:
– Soporte para programas que utilizan diferentes versiones de una misma biblioteca.
– Actualizaciones automáticas y renovación de versiones.
– Hacer todo lo anterior mientras otros programas se ejecutan utilizando bibliotecas
de versiones anteriores.
• Los objetos compartidos tienen nombres etiquetados como “fully-
qualified soname”.
– “soname” prefijo lib + nombre + .so + .version
– “real-name” soname + .minor_num [ + .release ]
– “linker name” soname - .version
• Es común que los nombres “soname” y para el “linker” sean ligas
simbólicas al “real-name”.
22. Directorios predefinidos
• Normalmente los “shared objects” están ubicados
en:
– /usr/lib … para versiones “release”.
– /usr/local/lib … para versiones “developer”.
• Sin embargo, la variable de ambiente
LD_LIBRARY_PATH puede ser utilizada para
hacer referencia a otra carpeta, de modo que el
“dynamic linker” pueda encontrar la biblioteca
durante tiempo de ejecución de un programa.
23. Generación de un “shared object”
1. Crear el código objeto.
gcc –fPIC –c archUnoBibDinamica.c archDosBibDinamica.c
Lo anterior producirá: archUnoBibDinamica.o y archDosBibDinamica.o
4. Crear la biblioteca.
gcc –shared –Wl,-soname=libBibDinamica.so.1
-o libBibDinamica.so.1.0.1 *.o
Lo anterior producirá: libBibDinamica.so.1.0.1
7. Instalar la biblioteca.
cp libBibDinamica.so.1.0.1 /usr/lib
ln –sf /usr/lib/libBibDinamica.so.1.0.1 /usr/lib/libBibDinamica.so
ln –sf /urs/lib/libBibDinamica.so.1.0.1 /usr/lib/libBibDinamica.so.1
Lo anterior producirá dos ligas simbólicas: libBibDinamica.so y libBibDinamica.so.1
11. Compilar la aplicación que requerirá a la biblioteca.
gcc –Wall –L/path/to/lib prog.c –lBibDinamica
Lo anterior producirá: a.out
24. Biblioteca de enlace dinámico explícito
• Requieren que el código del programa carge
explícitamente el código binario de la
biblioteca y búsque en él las rutinas de
interés.
• Las siguientes funciones son útiles para
esto:
– dlopen(…)
– dlclose(…)
– dlsym(…)
– dlerror(…)
25. Código fuente de una aplicación
#include <stdio.h>
#include <dlfcn.h>
int main() {
void *lib_handle;
int (*fn)(int,int);
char *error;
lib_handle = dlopen("/opt/lib/libBibCompartida.so", RTLD_LAZY);
if (!lib_handle) {
fprintf(stderr, "%sn", dlerror());
return(1);
}
fn = dlsym(lib_handle, "add2ints");
if ((error = dlerror()) != NULL) {
fprintf(stderr, "%sn", error);
return(1);
}
printf("add=%dn",(*fn)(1,2));
.
.
. gcc -rdynamic prog.c -ldl
dlclose(lib_handle); Lo anterior producirá: a.out
return(0);
}