Kompilera C med gcc - hittar inte stdio.h

Användarvisningsbild
Nekomata
Inlägg: 54
Blev medlem: 05 sep 2006, 11:33
Ort: Stockholm

Kompilera C med gcc - hittar inte stdio.h

Inlägg av Nekomata »

Jag är (nästan) total nybörjare när det gäller Linux och har precis börjat använda Ubuntu. Det mesta funkar bra och jag får allt mer kläm på hur saker går till, men nu har jag ett problem jag helt går bet på.

Jag har precis börjat en kurs i C-programmering och vill då naturligtvis kunna kompilera mina program. Men jag måste ha missat något - troligtvis i min installation av gcc. Jag har skrivit ett minimalt "hello world" program som jag sedan försöker kompilera med gcc.

Kod: Markera allt

#include <stdio.h>

int main(void){
   printf("Hej världen/n");
   return 0;
}
När jag försöker kompilera den här koden med kommandot:
gcc -g -Wall -o hellow Hellow.c

Får jag felmeddelandena:

Kod: Markera allt

Hellow.c:1:19: error: stdio.h: No such file or directory
Hellow.c: In function ‘main’:
Hellow.c:4: warning: implicit declaration of function ‘printf’
Hellow.c:4: warning: incompatible implicit declaration of built-in function ‘printf’
Det verkar alltså som om den inte hittar standardbiblioteket stdio.h och utan det blir det ju inte mycket gjort. Kan någon hjälpa mig med det här så blir jag evigt tacksam, Det känns lite sådär att inte ens komma förbi "Hello world"-stadiet :)
Okänd
Inlägg: 30172
Blev medlem: 03 mar 2008, 01:30
OS: Ubuntu

Kompilera C med gcc - hittar inte stdio.h

Inlägg av Okänd »

Intressant... finns stdio.h /usr/include? Det är där som kompilatorn letar.

Ligger stdio.h någon annanstans lägg till -IPATH_TO_INCLUDE.
gcc -g -Wall -IPATH_TO_INCLUDE -o hellow Hellow.c


Ett litet tips vill man kompilera så enkla program kan man skriva

make Hellow

skapar programmet Hellow från Hellow.c

Är det någon som kan kommandot får att lista filer i ett deb paket?
Okänd
Inlägg: 30172
Blev medlem: 03 mar 2008, 01:30
OS: Ubuntu

Kompilera C med gcc - hittar inte stdio.h

Inlägg av Okänd »

============================================
Jag tag reda på det själv :)

dpkg -L för ett installerat paket
dpkg -c för ett debian paket

============================================

Du saknar libc så klart...

Installera libc6-dev så kommer det att gå bättre


Lycka till
Användarvisningsbild
Nekomata
Inlägg: 54
Blev medlem: 05 sep 2006, 11:33
Ort: Stockholm

Kompilera C med gcc - hittar inte stdio.h

Inlägg av Nekomata »

Jamen titta, jag installerade libc6-dev med apt-get och nu funkar det finfint! Tack så hemskt mycket för hjälpen :D

När det gäller make, visst måste man konfigurera på något vis för att få det att fungera? Jag tror att vi kommer till det på kursen strax (och det finns säkert tusentals guider) men om nån har lust att förklara lite snabbt så blir jag bara glad.
Okänd
Inlägg: 30172
Blev medlem: 03 mar 2008, 01:30
OS: Ubuntu

Kompilera C med gcc - hittar inte stdio.h

Inlägg av Okänd »

Just det det där enkla sättet fungerar utan att skriva en Makefile.

make Hellow

då det finns en fil Hellow.c med en main funktion i.

du måste dock installera make först...


Utan att anstränga mig hittade jag denna sida om gnu make.
http://theory.uwinnipeg.ca/gnu/make/make_toc.html

Ett exempel:

Kod: Markera allt

SRC_C=test.c main.c

DEBUG=
CFLAGS=-Wall $(DEBUG)
CC=gcc


SRC_O  = $(SRC_C:.c=.o)

test: $(SRC_O)
        $(CC) $(CFLAGS) $^ -o $@

%.o : %.c
        $(CC) -c $(CFLAGS)  $< -o $@
Först kommer deklarationer av variabler
test.c och main.c är dina filer som du ska kompilera till programmet test

SRC_O = $(SRC_C:.c=.o) Alla förekomster av .c i SRC_C byts ut mot .o. SRC_O kommer alltså innehålla test.o och main.o

Det första målet (i fortsättningen kallar jag det för target) är test. Då tittar make på höger sida om :
Om det på högersidan inte finns kollar make vidare för att se om det finns regler för att bygga det.

Det finns det
%.o : %.c
Detta target innebär att .o filen byggs från en .c fil med samma namn.
$(CC) -c $(CFLAGS) $< -o $@
Variablerna byts ut; $< betyder första värdet till höger om : och $@ det till vänster.
-c står för att filen enbart ska kompileras, ingen länkning.
OBS! Det ska vara en tab innan kommandot ($(CC) -c $(CFLAGS) $< -o $@)


När nu både main.o och test.o finns kan make gå tillbaka och bygga test

$(CC) $(CFLAGS) $^ -o $@

$^ betyder alla argument till höger om :
Användarvisningsbild
Nekomata
Inlägg: 54
Blev medlem: 05 sep 2006, 11:33
Ort: Stockholm

Kompilera C med gcc - hittar inte stdio.h

Inlägg av Nekomata »

[quote="mcNils"]du måste dock installera make först...[/quote]
Haha, där hade vi problemet :) Av någon anledning utgick jag från att det ingick.

Tack så hemskt mycket för all hjälp, nu känner jag mig lite klokare på make också!
Skriv svar

Återgå till "Program - inaktuell"