Muy buena explicación. Estuve buscando por mucho tiempo en internet y no llegué a encontrar una explicación tan buena de los archivos .h y los archivos .lib. Me ha resuelto todas las dudas, muchísimas gracias. Un saludo
@Juncotic Жыл бұрын
Hola!! Me alegro muchísimo que el video te haya servido!! :D Saludos y gracias a vos por dejar tu comentario! Diego @d1cor
@victorm.rodriguezs.7329 Жыл бұрын
¡Felicidades! Es un gran y buen ejemplo ya puesto en practica. Todo eso ya practicado y probado lo podemos guardar en un .bat y a producir nuestras librerías a granel. Buen video. Gracias.
@Juncotic Жыл бұрын
Mil gracias a vos por tu comentario!! Saludos! Diego
@Carlos-kd7tu2 жыл бұрын
muy buen video, y sobre todo el articulo, muy buena ayuda para comprender el proceso de compilacion etc en c, gracias
@Juncotic2 жыл бұрын
Mil gracias a vos por comentar! Me alegra que el contenido te haya servido!
@FranRoscelli6 жыл бұрын
Re bien explicado!!, y el ejemplo es muy ilustrativo. Salvaste mi parcial de mañana jaja
@Juncotic6 жыл бұрын
jaja muchas gracias!!! Espero que te haya ido bien en el parcial! :) (@d1cor)
@yosef31764 жыл бұрын
me ayudaste mucho. Muchas GRACIAS!
@Juncotic4 жыл бұрын
Al contrario! Gracias a vos por comentar. Saludos! @d1cor
@teresaolmos94602 жыл бұрын
Hola! Todo muy bien explicado, solo una duda, al momento de ejecutar: gcc calculadora.o -L../libcalculadora/ -lcalculadora -o calculadora ¿Por qué se debe poner 'lcalculadora', si el nombre que se le había dado al archivo era libcalculadora.a? Gracias 😁
@Juncotic2 жыл бұрын
Hola Teresa! Perdón por el delay! Exacto, -lcalculadora es porque el compilador busca un archivo de librería llamado libcalculadora.a en la ruta especificada por el modificador "-L". Gracias por tu comentario! @d1cor
@teresaolmos94602 жыл бұрын
@@Juncotic Muchas gracias!!
@morenasodefuego763 жыл бұрын
Muy buena explicacion
@richardfrangie35182 жыл бұрын
Llegue aquí por la página web, me sirvio para entender un poco sobre compilación, linker, código objeto, pero me queda la duda, cual es la diferencia entre código objeto, bytecode y código maquina, gracias
@Juncotic2 жыл бұрын
Hola Richard! Me alegro que el video te haya servido! Respecto de tu duda, al hablar de bytecode estamos hablando de un lenguaje que ejecuta aplicaciones mediante una máquina virtual (o runtime) intermedio. Eso no se ve en C porque el fuente de C lo compilás y generás directamente código de máquina para tu sistema operativo y arquitectura específica. Lenguajes como Java, por ejemplo, funcionan con lo que se denomina máquina virtual, o runtime, que es un "intérprete" intermedio. Cuando compilás un programa en Java, el compilador nativo genera un "código de máquina" intermedio para esa máquina virtual, y la máquina virtual, al momento de la ejecución, interpreta ese código intermedio y genera el código de máquina que puede leer tu sistema operativo. Ese código de máquina intermedio es lo que se llama "bytecode". Eso lo hace mayormente por portabilidad, es decir, vos podés tener una máquina virtual java (runtime) instalada en Linux y otra en Windows. Te creás una aplicación, la compilás y obtenés el bytecode (código de máquina para la máquina virtual). Y ese bytecode lo podés ejecutar en el runtime de linux o en el de windows sin necesidad de modificarlo para cada arquitectura... esa modificación la hace el runtime en cada sistema operativo, y te ahorrás "recompilar" el código fuente para cada sistema. Eso lo hace más portable a tu código, pero al tener que pasar por un intérprete intermedio como el runtime, también lo suele hacer más lento y suele consumir más recursos. Espero te sirva! Me quedó larga la respuesta :P Saludos! @d1cor
@richardfrangie35182 жыл бұрын
@@Juncotic Oh amigo q bien, gracias, ahora si entendí, no sabe cuantos blog leí y nada, hasta que llegue al suyo y fue el único que medio empece a entender, y el código objeto que sería?, yo tengo la idea pero al mezclarlos me enredo, gracias por responder.
@richardfrangie35182 жыл бұрын
Ah y disculpe pero los tres son códigos binarios?
@Juncotic2 жыл бұрын
En el proceso de compilación, tomás el código fuente, lo compilás y generás código de máquina de ese fuente, y a ese código se lo llama "objeto". Ese código fuente seguramente haga uso de librerías externas, como el libc, por lo que el código objeto compilado no es ejecutable, no es funcional, porque primero tenés que enlazarlo (link) con los códigos de esas librerías externas. Al enlazarlos estás transformando tu código objeto en un código binario ejecutable. Así, el código objeto es un código binario que todavía no está enlazado con las librerías externas.
@Juncotic2 жыл бұрын
Código objeto y binario ejecutable sí, son binarios, incluyen código de máquina. El bytecode también suele ser binario, porque es código de máquina para una máquina virtual específica. El único código legible por el humano es el fuente, que es texto plano.
@diegopersello34304 жыл бұрын
HOla muy buenas estimado! Una consulta....Que pasa si quito stdio.h y stdlib.h de mi archivo main.c y los coloco en mi cabecera a utilizar? Yo lo hice y mi programa funciona, pero es una bestialidad esto? Me sabrías explicar? Muchas gracias! Saludos desde Mar del Plata, Argentina!!!
@Juncotic4 жыл бұрын
Hola Diego! No, no es una bestialidad, todo depende de dónde uses tu cabecera .h. Como regla general: (1) Los headers deben incluirse sólo donde sean necesarios. Podés tener un ejemplo.h que incluya a math.h, y otros 30 archivos que incluyan a ejemplo.h, de los cuales sólo uno de ellos use math.h. (2) Los headers que crees deberían ser tolerantes a duplicados (usando #ifndef _EJEMPLO_H_ y esas cosas). (3) No debe importar el orden en el que se incluyan los headers en un archivo .c/.cpp. Así, si tenés 30 archivos .c que utilizan stdio, y a su vez todos incluyen un ejemplo.h, podría ser ordenado incluir el stdio dentro del ejemplo.h y sacar el stdio de los .c, pero sería bueno hacer eso solamente en el caso de que se justifique a nivel de mantenibilidad del código. Yo suelo definir los .c según funcionalidad (funciones relacionadas, por ejemplo) y suelo crear un .h por cada .c con sus prototipos y definiciones de datos. Los .h de lib estándar los suelo incluir en los .c luego de mis .h y sólo en aquellos .c que lo requieran. En los .h míos suelo incluir los .h de la lib estándar sólo si los necesito para alguna definición de dato. Esto es opinión personal! Una buena práctica es ir a repositorios git de proyectos open source grandes, y estudiar cómo están armados para sacar ideas, en general están hechos por programadores con mucha experiencia y horas de código. Espero te sirva! Saludos desde San Rafael, Mendoza!! @d1cor
@diegopersello34304 жыл бұрын
@@Juncotic excelente! Gracias por tomarte el tiempo de responder! Quedo a la espera de más contenido! Saludos!