C Academy · Oppitunti

Useiden tiedostojen kääntäminen

Kootkaa usean tiedoston ohjelma.

Oppitunti 4/413 vaihetta

Useiden tiedostojen kääntäminen on ilmainen C Academy-oppitunti CoddyKitissä. Tämä on oppitunti 4/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu C Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. C Academy-kurssilla on yhteensä 4 oppituntia.

Lähdekoodista ohjelmaksi

Monitiedostoisen C-lähdekoodin muuttaminen suoritettavaksi ohjelmaksi tapahtuu kahdessa vaiheessa: kääntämisessä ja linkittämisessä.

Jokainen .c-tiedosto käännetään erikseen objektitiedostoksi. Sen jälkeen linkkeri yhdistää kaikki objektitiedostot ja ratkaisee niiden väliset viittaukset yhdeksi suoritettavaksi ohjelmaksi.

Koonti yhdellä komennolla

Yksinkertaisin tapa on antaa kaikki lähdetiedostot gcc-ohjelmalle kerralla. Kääntäjä kääntää jokaisen tiedoston ja linkittää ne sitten automaattisesti.

-o-valitsin nimeää tuloksena olevan ohjelman. Luetelkaa kaikki .c-tiedostot; otsikkotiedostot sisällytetään #include-direktiivillä, eikä niitä luetella tässä.

gcc main.c math_utils.c -o app

Erillinen kääntäminen

Suuremmissa projekteissa kääntäkää jokainen tiedosto objektitiedostoksi -c-valitsimella. Tämä tuottaa .o-tiedoston eikä suorita linkitystä.

Kun tiedostot käännetään erikseen, yhden lähdetiedoston muuttaminen edellyttää vain kyseisen tiedoston uudelleenkääntämistä, mikä nopeuttaa suurten projektien koontia.

gcc -c main.c        /* produces main.o */
gcc -c math_utils.c  /* produces math_utils.o */

Linkitysvaihe

Kun objektitiedostot ovat valmiina, linkittäkää ne suoritettavaksi ohjelmaksi. Tässä gcc toimii linkkerinä, joka yhdistää objektit ja ratkaisee tiedostojen väliset symbolit.

Tällä kertaa -c-valitsinta ei käytetä, koska haluamme lopullisen ohjelman emmekä uutta objektitiedostoa.

gcc main.o math_utils.o -o app

Linkkerin toiminta

Linkkeri yhdistää symbolin jokaisen käytön sen määrittelyyn.

Kun main.o kutsuu add-funktiota, linkkeri etsii math_utils.o-tiedostossa määritellyn add-funktion ja yhdistää ne. Se tuo mukaan myös ohjelman tarvitseman standardikirjaston koodin.

Määrittelemättömien viittausten virheet

Jos unohdatte linkitysvaiheessa jonkin objektitiedoston, linkkeri ei löydä määrittelyä ja ilmoittaa määrittelemättömästä viittauksesta.

Tämä on linkityksen aikainen virhe, ei käännösvirhe: jokainen tiedosto kääntyi ongelmitta, mutta tarvittava määrittely puuttui lopullisesta komennosta.

gcc main.o -o app
/* undefined reference to `add' */
/* fix: include math_utils.o */

Hyödylliset varoitusvalitsimet

Kääntäkää aina varoitukset käytössä. -Wall ja -Wextra tuovat todennäköiset virheet esiin varhain.

-std=c11-valitsin valitsee kielistandardin, jolloin toiminta on ennakoitavaa eri kääntäjillä. Nämä valitsimet toimivat sekä yhden vaiheen että erillisen kääntämisen yhteydessä.

gcc -Wall -Wextra -std=c11 -c main.c
gcc -Wall -Wextra -std=c11 -c math_utils.c
gcc main.o math_utils.o -o app

Include-polut

Kun otsikkotiedostot sijaitsevat toisessa hakemistossa, kertokaa kääntäjälle hakupaikka -I-valitsimella.

Esimerkiksi -Iinclude lisää include/-kansion hakupolulle, joten #include "math_utils.h" toimii myös toisesta hakemistosta.

gcc -Iinclude -c src/main.c -o build/main.o

Miksi uudelleenkääntäminen on tärkeää

Erillinen kääntäminen on parhaimmillaan silloin, kun vain yksi tiedosto muuttuu. Käännätte uudelleen vain kyseisen tiedoston objektin ja linkitätte sitten uudelleen.

Jos muokkaatte otsikkotiedostoa, jokainen sitä sisällyttävä lähdetiedosto on kuitenkin käännettävä uudelleen, koska otsikkotiedoston teksti on osa jokaista niistä.

/* edited math_utils.c only */
gcc -c math_utils.c
gcc main.o math_utils.o -o app

Automatisointi make-työkalulla

Komentojen kirjoittaminen käsin käy työlääksi. Makefile tallentaa säännöt ja rakentaa uudelleen vain muuttuneet osat.

Tämä pieni esimerkki linkittää kaksi objektia tiedostoksi app; make seuraa tiedostojen aikaleimoja päättääkseen, mitkä niistä pitää kääntää uudelleen.

app: main.o math_utils.o
	gcc main.o math_utils.o -o app

main.o: main.c math_utils.h
	gcc -c main.c

Koko koonnin kertaus

Tässä on koko pienen projektin työnkulku objektitiedostoista valmiiksi ohjelmaksi varoitukset käytössä.

Kääntäkää jokainen lähdetiedosto ja linkittäkää sitten objektit. Suorittakaa tulos varmistaaksenne, että kaikki toimii alusta loppuun.

gcc -Wall -c main.c
gcc -Wall -c math_utils.c
gcc main.o math_utils.o -o app
./app

Pikatarkistus

Tarkistakaa, miten hyvin ymmärrätte monitiedostoisen projektin koontiprosessin.

Kertaus

Opitte kääntämään jokaisen .c-tiedoston objektiksi -c-valitsimella ja linkittämään objektit sitten ohjelmaksi. Käyttäkää varoituksiin -Wall-valitsinta ja otsikkotiedostojen hakupolkuihin -I-valitsinta.

Määrittelemättömät viittaukset tarkoittavat linkityksen aikana puuttuvaa objektitiedostoa. make-työkalun kaltaiset työkalut automatisoivat vain muuttuneiden osien uudelleenrakentamisen.

Aloita maksutta

Opi C tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
39
Oppitunnit
144

Usein kysytyt kysymykset

Onko oppitunti ”Useiden tiedostojen kääntäminen” ilmainen?

Kyllä – oppitunnin ”Useiden tiedostojen kääntäminen” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko C Academy-kurssin, päivitä CoddyKit PROhon. C Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Useiden tiedostojen kääntäminen”?

Kootkaa usean tiedoston ohjelma. Harjoittelet C Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni C Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin C Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.

Kuinka kauan ”Useiden tiedostojen kääntäminen”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä C Academy-oppitunnilla?

Kyllä. Jokainen C Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Otsikko- ja lähdetiedostot
  2. Sisällytyksen estot
  3. extern ja linkitys
  4. Useiden tiedostojen kääntäminen
← Takaisin: C Academy