elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Algunas preguntas sobre GCC
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Algunas preguntas sobre GCC  (Leído 3,599 veces)
Usuario887


Desconectado Desconectado

Mensajes: 310


Ver Perfil
Algunas preguntas sobre GCC
« en: 15 Abril 2021, 17:13 pm »

Hola,

¿Es GCC un compilador o un linker?
Tengo entendido que son programas diferentes, sin embargo un codigo fuente puede ser compilado y enlazado con el comando simple gcc prog.c -o prog.exe

¿Existe una opcion -l que especifica una libreria como archivo por separado, o cuando se especifica por ejemplo -lwinhttp esta libreria esta integrada de antemano en gcc.exe?


En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.937


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Algunas preguntas sobre GCC
« Respuesta #1 en: 15 Abril 2021, 17:28 pm »

Es un compilador, normalmente estos por defecto llaman al enlazador, salvo que se les pase un modificador para no hacerlo.

Cita de: Wikipedia
GCC's external interface follows Unix conventions. Users invoke a language-specific driver program (gcc for C, g++ for C++, etc.), which interprets command arguments, calls the actual compiler, runs the assembler on the output, and then optionally runs the linker to produce a complete executable binary.

Esa es una libreria de importacion y es un archivo .a (o .lib en VC++) que podes encontrar entre los subdirectorioes del entorno que hayas instalado.



Siempre es mejor usar las herramientas nativas (Xcode en macOS, Visual Studio en Windows, etc.): https://visualstudio.microsoft.com/vs/community/


En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
BloodSharp


Desconectado Desconectado

Mensajes: 804


El Messi-Vegeta :D


Ver Perfil
Re: Algunas preguntas sobre GCC
« Respuesta #2 en: 15 Abril 2021, 17:35 pm »

¿Es GCC un compilador o un linker?
Según tengo entendido no es ninguno de los dos, es un programa "front-end" para el compilador y el enlazador...
Cita de: Wikipedia
Los usuarios llaman un programa controlador llamado gcc, que interpreta los argumentos dados, decide qué compilador usar para cada archivo y ejecuta el ensamblador con el código resultante, después posiblemente ejecuta el enlazador para producir un programa completo.

¿Existe una opcion -l que especifica una libreria como archivo por separado, o cuando se especifica por ejemplo -lwinhttp esta libreria esta integrada de antemano en gcc.exe?
En sistemas GNU/Linux te enlaza con el shared object (.so) directamente (sin necesidad de librerías estáticas), sin embargo se puede utilizar con librerías estáticas también (.a)...

En cambio si estás utilizando por ejemplo MinGW, si o si necesitás las librerías estáticas que enlazan a las librerías dinámicas, en el caso de -lwinhttp, si es que existe, tendrías que encontrar la librería dinámica libwinhttp.a en el directorio \lib. Si no se encuentra se puede generar la librería estática libwinhttp.a manualmente con los exports que se requieran para enlazar tu programa con la librería dinámica o incluso utilizar las librerías estáticas .lib del Visual Studio. NOTA: Solo se pueden utilizar estáticas que enlazan a librerías dinámicas en este caso, no las que contienen código...


B#
En línea



@XSStringManolo
Hacker/Programador
Colaborador
***
Desconectado Desconectado

Mensajes: 2.397


Turn off the red ligth


Ver Perfil WWW
Re: Algunas preguntas sobre GCC
« Respuesta #3 en: 15 Abril 2021, 19:33 pm »

Hola,

¿Es GCC un compilador o un linker?
Tengo entendido que son programas diferentes, sin embargo un codigo fuente puede ser compilado y enlazado con el comando simple gcc prog.c -o prog.exe

¿Existe una opcion -l que especifica una libreria como archivo por separado, o cuando se especifica por ejemplo -lwinhttp esta libreria esta integrada de antemano en gcc.exe?
Es un conjunto de herramientas para compilar con soporte para múltiples lenguajes y arquitecturas. GNU Compiler Collection. Entre estas herramientas tienes un preprocesador, un linker, un compilador, debugger, etc.

Los distintos binarios y las librerías que añades a -l se buscan en distintos directorios del sistema.
En mi caso, termux y clang, puedo ver las rutas con el comando clang -print-search-dirs

Y muestra:
programs: /bin/

libraries: /lib/clang/11.1.0/
/lib/
/system/lib64/

Ahí es donde están las librerías. Los compiladores incluyen algunas librerías básicas. Algunos programas también instalan sus librerías al instalar el programa con un paquete. Otras las tienes que instalar explícitamente, otras necesitas el código fuente del programa sin compilar para usarlas. Otras vienen con el propio sistema operativo. Etc.
En línea

Mi perfil de patrocinadores de GitHub está activo! Puedes patrocinarme para apoyar mi trabajo de código abierto 💖

Usuario887


Desconectado Desconectado

Mensajes: 310


Ver Perfil
Re: Algunas preguntas sobre GCC
« Respuesta #4 en: 15 Abril 2021, 21:15 pm »

Quedo claro. Gracias por sus respuestas.
En línea

MinusFour
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.529


I'm fourth.


Ver Perfil WWW
Re: Algunas preguntas sobre GCC
« Respuesta #5 en: 15 Abril 2021, 22:31 pm »

Es un conjunto de herramientas para compilar con soporte para múltiples lenguajes y arquitecturas. GNU Compiler Collection. Entre estas herramientas tienes un preprocesador, un linker, un compilador, debugger, etc.

Los distintos binarios y las librerías que añades a -l se buscan en distintos directorios del sistema.
En mi caso, termux y clang, puedo ver las rutas con el comando clang -print-search-dirs

Y muestra:
programs: /bin/

libraries: /lib/clang/11.1.0/
/lib/
/system/lib64/

Ahí es donde están las librerías. Los compiladores incluyen algunas librerías básicas. Algunos programas también instalan sus librerías al instalar el programa con un paquete. Otras las tienes que instalar explícitamente, otras necesitas el código fuente del programa sin compilar para usarlas. Otras vienen con el propio sistema operativo. Etc.

El linker no es técnicamente parte de GCC, es parte de binutils, gdb tampoco es parte de GCC. Por cierto, clang es LLVM no GCC.

En este caso yo creo que estas utilizando o Cygwin o MinGW para compilar el código. Por lo que veo de la documentación de Cygwin parece que GNU Linker si puede crear DLLs y puede linkear contra DLLs. No me queda claro el orden que usa GNU Linker en este caso.... Por lo general, en Linux busca por archivos .so o .a, no se si usando Cygwin solo use .dll o .lib o si use también .so o .a.

Esa es la belleza de GCC, que puede usar multiples front-ends para compilar código.

A decir verdad, tampoco me queda claro si el linker que se usa en Cygwin es ld (GNU Linker), un port o un linker parecido. Yo creo que si pero el proceso no es el común que te encuentras con ELFs.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
algunas preguntas
Java
darkxxx 4 2,843 Último mensaje 30 Julio 2007, 19:52 pm
por Yshua
Algunas preguntas!
Desarrollo Web
neopuerta360 0 1,609 Último mensaje 2 Mayo 2011, 00:57 am
por neopuerta360
Algunas preguntas sobre la Interfaz Grafica en Java.
Java
Coke951 3 3,209 Último mensaje 2 Junio 2015, 09:38 am
por Coke951
Algunas preguntas sobre fisica « 1 2 »
Foro Libre
MRx86 15 6,540 Último mensaje 24 Noviembre 2016, 09:20 am
por Orubatosu
algunas preguntas sobre drivers en windows
Windows
MRx86 4 2,883 Último mensaje 31 Mayo 2017, 17:58 pm
por Randomize
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines