Compilar c y ensamblador

Para compilar c y encamblador en linux utilizo el gcc, el prolema que tengo es que necesito la libreria stdio.h para poder compilar correctamente mis programas pero no consigo encontrar esas librerias.
Alguien me puede decir donde conseguirlas??? Tambien me gustaria saber donde tengo que colocar esas librerias para que funcionen.
1) stdio.h NO es una librería, es parte de C99 (Sección 7.19)
2) La librería estándar de C tiene que venir con tu distribución de Linux

- ferdy
No entiendo entonces porque al compilar un programa me da un error en lo son las escrituras printf
Escribe un programa elemental incluyendo y un printf
compilalo y pega la salida si hay error.
Salud.
Este es el programa y la respuesta al compilarlo. Tambien te he puesto el path x si acaso, a ver si me podeis decir que pasa.

#include


main()
{
printf("hola");

}


vicente@vicente-laptop:~/Desktop$ gcc EscribeFrase.c
EscribeFrase.c:1:19: error: stdio.h: No existe el fichero ó directorio
EscribeFrase.c: En la función ‘main’:
EscribeFrase.c:6: aviso: declaración implà cita incompatible de la función interna ‘printf’
vicente@vicente-laptop:~/Desktop$ printenv PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11:/usr/games
Si hubieras empezado por poner tu distribución te podríamos haber ayudado desde el principio.

- ferdy
falta decir como lo has compilado.
falta decir como lo has compilado.


ein ? no vvvvvvvv

vicente@vicente-laptop:~/Desktop$ gcc EscribeFrase.c


- ferdy
La destribucion es ubuntu.
Entonces cual es la solucion al problema?????
Que en ubuntu son así y te hacen instalar el paquete 'build-essential' para poder compilar el "hola mundo".

- ferdy
Perdon , perdon, evidentemente es cosa de la distribución.


Salud.
Hola,
Yo tambien ando intentado compilar algo en ubuntu (5.10) y he instalado gcc y build-essential.
He hecho un hola mundo con gedit y lo he guardado en el escritorio como new.c
abro la consola y pongo $ gcc /home/usuario/Desktop new.c
no consigo nada, ni un triste mensaje de error ni nada

este es el codigo (no vaya a ser que haya metido la gamba):

#include

main ()

{
printf("Hola gilipollas\n");

}

Esto viene a que no consigo poner el anjuta en el portatil.
Cualquier ayuda seria de agrado, me estoy rallando un monton y fijo que es alguna chorradilla.
Ha funcionado. Lee la documentación del compilador, el binario se llama a.out

- ferdy
Si, tienes razon, aunque creo que no hace falta que te lo diga. [+risas]
Supongo que estaba esperando la tipica ventanita que me sale cuando compilo en Visual C de WinXP. Se que conseguí sacar por la consola los printf pero no recuerdo como. Ya me miraré el man para no cansaros mucho. De todos modos ya he conseguido poner el ajunta y si no lo consigo con este ya me saldra con el otro.

La otra duda que me ronda es la de las librerias, he leido como vincular las librerias que necesite con el gcc, pero no me queda claro si puedo usar las mismas que con windows o cambian en algo.

Mas concretamente las unicas librerias que voy a usar para Visual C son stdio.h conio.h y math.h. Hay algun problema si hay includes a estas librerias en algun programa que compile??
O tengo que incluir otras librerias diferentes??
Y esas librerias diferentes, vienen con ubuntu o tendre que buscarlas en algun repositorio?? [+risas]

Bueno gracias por aguantarme [risita]
stdio.h y math.h son parte de ANSI C, conio.h no, así que tendrás que buscarte un reemplazo, en Unix el estándar de facto es [n]curses.

- ferdy
gracias,
una pregunta un poco tonta, las librerias se actualizan como los programas y repositorios? es decir apt-get para paquetes debian? o hay que conseguirlas por algun otro medio (google o p2p)?

PD: Otra duda que me asalta es; Cuando hacemos make, make install (todavia no lo he hecho [mad] ) con los sources de algun programa, que diferencia hay entre hacer esto y compilar mediante un compilador (gcc por ejemplo)?
una pregunta un poco tonta, las librerias se actualizan como los programas y repositorios? es decir apt-get para paquetes debian? o hay que conseguirlas por algun otro medio (google o p2p)?


Depende de cuales... pero siempre vendrán en algún paquete

PD: Otra duda que me asalta es; Cuando hacemos make, make install (todavia no lo he hecho smile_[mad] ) con los sources de algun programa, que diferencia hay entre hacer esto y compilar mediante un compilador (gcc por ejemplo)?


make llama a gcc (en los Makefile's)

- ferdy
Si mis recuerdos de la semana pasada no me fallan al hacer el make ejecutamos los comandos introducidos en el (habitualmente, aunque se puede cambiar pasandolo como argumento) makefile.

En este si le abres veras que existen una definicion de los objetos que componen el programa, los compiladores usados y algunas cosillas mas. Si le abres ,veras que no son mas que eso y ordenes del gcc para compilar. Vamos, un script que hace que no hagas tu unos cuantos gcc a mano.

¿Mis recuerdos son buenos? :P

Salu2!
¿Mis recuerdos son buenos?


Una explicación bastante simplificada de la realidad, pero sin duda buena.

- ferdy
Ferdy escribió:Una explicación bastante simplificada de la realidad, pero sin duda buena.

- ferdy


Gracias!! ^_^

Salu2!
Pero eso qué quiere decir?
Es un script realmente y se puede modificar como tal?
O es que es algo incluso mas complejo?

Por cierto, de dónde conseguis toda esta informacion?
Me refiero a cuando dices que es una explicacion muy simplificada, donde se encuentran las extensas respuestas de los gurus perfeccionistas (Sin acritud :) )
Los Makefile indican CÓMO deben construirse los distintos objetos, ejecutables y bibliotecas. Y puedes definir qué comandos ejecutar en cada caso.

Por lo general leyendo la documentación sobre make entenderás cómo funciona :) [esto aplica tanto para make como para casi cualquier software]

- ferdy
Es gracioso porque me he leído el man de ls y cuando uso las opciones -h (--human-readable) o --si para que los datos salgan con sus respectivos "pesos" no consigo nada. [reojillo]
Lo mismo me pasa con un monton de cosas que leo en los man, o no me funciona o no me entero de lo que me dicen, por eso preguntaba por algo para entender los man, o algo mas basico. Ya me estoy empezando a hastiar de que no me funcionen las cosas. Pero me da miedo volver a windows, la verdad es que espero no cogerle a linux el asco que le tengo a windows, pero a este paso... [agggtt]
cheff, haz ls -lh y fijate en los tamaños, hay un ligero cambio de hacer el ls -l :)

Salu2!
OFFTOPIC, si quieres mirar los pesos de los archivos, puedes mirarte el comando du :)

du -h --apparent-size *

XD
[OFF-TOPIC]

Para cerrar el tema del ls:

Bien, como dices adES ya veo la diferencia entre hacer ls -l y ls -lh pero sigo sin entender porque no puedo hacer ls -h.
Y tambien he provado lo del du, pero me quedo con ls -oh que me da toda la informacion util que necesito (o al menos asi lo veo).

[OFF-TOPIC]

Siguiendo con gcc, (bueno, ya he visto lo facil que es compilar y ejecutar con anjuta, y tambien he visto que lo hace llamando a gcc, con lo que deduzco que el compilador por excelencia de c en linux es gcc y que los demas lo usan para compilar codigo de c, corregidme si me equivoco) pues me he puesto a leer el man gcc y casi me da un patatazo [tomaaa] . La verdad es que prefiero preguntar por aqui por algun tutorial bueno para iniciados con gcc o algun site en el que se expliquen las funciones basicas, claramente. De momento lo que quiero es poder sacar el codigo en la consola.
[[

Edito vale, ya he descubierto como:
./miprograma

era facil

]]

De todos modos, algun sitio de donde sacar info, porque si no os voy a machacar con tanta pregunta y para que me digais [rtfm] pues ya directamente lo pregunto [oki]

Bueno, gracias por seguir leyendo!

PD: El hilo habla de compilar c y ensamblador, y no hemos tocado el tema del ensamblador. A alguien le apetece dar un speech sobre assembler?? [ginyo]
La verdad es que ya ni me acuerdo, era lo de editar archivos en hexadecimal, con lo que podias llegar a hacer cualquier cosa verdad?
cheff escribió:[OFF-TOPIC]

Para cerrar el tema del ls:

Bien, como dices adES ya veo la diferencia entre hacer ls -l y ls -lh pero sigo sin entender porque no puedo hacer ls -h.
Y tambien he provado lo del du, pero me quedo con ls -oh que me da toda la informacion util que necesito (o al menos asi lo veo).

[OFF-TOPIC]


"ls" por defecto solamente te saca la lista de directorios y ficheros sin nada mas. Si pones "ls -h" te seguira haciendo lo mismo ya que el argumento "-h" no tiene ningun dato a convertir (como dije antes "ls" a secas solamente saca los nombres de los directorios y los ficheros). En cambio si pones "ls -l" ves como ademas de los nombres sale mas informacion. En este caso si pones el "-h" junto a "-l", como si hay informacion (el tamaño de los ficheros) que se puede convertir a un formato mas facil de entender pues lo hace. Resumiendo, "-h" lo unico que hace es convertir cierta informacion DE LA QUE SE ESTA MOSTRANDO a un formato mas facil de entender.

Espero que haya quedado claro, me explico muy mal XD
Gracias Wanikoko, lo has explicado de puta madre.
La verdad es que me tenia que haber dado cuenta cawento ,gracias por hacermelo entender [ginyo]
Tengo mas dudas pero voy a abrir otro hilo porque si no esto va a ser un offtopic enterito; asi que aqui sigo con c.
Viendo que en linux no se pueden abrir .exe's como podemos hacer desde linux un ejecutable para windows? (O me estoy equivocando y el a.out es ese ejecutable?)
cheff escribió:(O me estoy equivocando y el a.out es ese ejecutable?)


El a.out es el ejecutable.
¿todavía no lo habías ejecutado?

cheff escribió:Viendo que en linux no se pueden abrir .exe's


¿qué?
Define abrir.


cheff escribió:como podemos hacer desde linux un ejecutable para windows?


¡¡¡Anatema.!!!

Salud.
altair1 escribió:
cita de cheff:
(O me estoy equivocando y el a.out es ese ejecutable?)


El a.out es el ejecutable.
¿todavía no lo habías ejecutado?


Si, /.a.out aunque no con ese nombre ya que al compilar hice $ gcc archivo.c -o tonto y luego para ejecutar, /.tonto
Aunque pensaba que en linux no se podian ejecutar exes.
Simplemente llevando ese a.out a windows y haciendo doble click sobre el lograré abrirlo verdad??


altair1 escribió:cita de cheff:
como podemos hacer desde linux un ejecutable para windows?


¡¡¡Anatema.!!!


[carcajad] [carcajad] [carcajad] [carcajad]

Supongo que se define abrir un exe por ejecutarlo, no se si me aclaro. Casi mejor, me podriais recomendar un manual para usuarios torpes [tomaaa] Quiero aprendeeer! [sonrisa]
haciendo doble click sobre el lograré abrirlo verdad??


Obviamente no

- ferdy
Basicamente un compilador lo que hace es de un archivo fuente generar un archivo ejecutable.

Para empezar, este archivo ejecutable tiene un formato distinto para cada sistema operativo, por lo que un ejecutable hecho para linux no funcionara en otro sistema operativo y viceversa.

¿Que ocurre cuando en una consola de linux escribes algo y pulsas return?
Basicamente, buscara si esa palabra es una palabra reservada y caso de que lo sea hara lo que tenga que hacer con esa palabra reservada, si no es una palabra reservada, busca un archivo que se llame como esa palabra que has escrito y chequeara el archivo para ver que puede hacer con el conforme a unos criterios y unas configuraciones. Si es un archivo ejecutable lo intentara ejecutar.

¿Que ocurre cuando en tu escritorio pinchas un ícono?
Basicamente lo que hará es ver si es un ícono especial o apunta a un archivo. Si es un ícono especial hará lo que tenga que hacer (ver documentacion).Si apunta a un archivo, mediante unos criterios y unas configuraciones hará lo que tenga que hacer con el archivo.
Hay por allí un escritorio de una cierta empresa que para ejecutar un 'ejecutable' nos dice que el archivo tiene que acabar por .exe. Pero alli se acaba la historia, es decir un ejecutable no tiene por que acabar con .exe y un .exe no tiene por que ser un ejecutable.

Bueno, ya no me enrrollo mas.

Si quieres aprender, cosas de estas, busca por google, en la wikipedia, bla bla bla, y sobre todo experimenta.

Suerte.

P.D. Dios ¿por que no me callaré?
31 respuestas