Autor
|
Tema: Algunas preguntas sobre GCC (Leído 3,973 veces)
|
Usuario887
Desconectado
Mensajes: 310
|
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
Mensajes: 5.966
Israel nunca torturó niños, ni lo volverá a hacer.
|
Es un compilador, normalmente estos por defecto llaman al enlazador, salvo que se les pase un modificador para no hacerlo. 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
Mensajes: 812
¡ Hiperfoco !
|
¿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... 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
Mensajes: 2.399
Turn off the red ligth
|
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
Mensajes: 310
|
Quedo claro. Gracias por sus respuestas.
|
|
|
En línea
|
|
|
|
MinusFour
|
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
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
algunas preguntas
Java
|
darkxxx
|
4
|
3,024
|
30 Julio 2007, 19:52 pm
por Yshua
|
|
|
Algunas preguntas!
Desarrollo Web
|
neopuerta360
|
0
|
1,777
|
2 Mayo 2011, 00:57 am
por neopuerta360
|
|
|
Algunas preguntas sobre la Interfaz Grafica en Java.
Java
|
Coke951
|
3
|
3,503
|
2 Junio 2015, 09:38 am
por Coke951
|
|
|
Algunas preguntas sobre fisica
« 1 2 »
Foro Libre
|
MRx86
|
15
|
7,042
|
24 Noviembre 2016, 09:20 am
por Orubatosu
|
|
|
algunas preguntas sobre drivers en windows
Windows
|
MRx86
|
4
|
3,141
|
31 Mayo 2017, 17:58 pm
por Randomize
|
|