In deze video praten we over linkerfouten en waarom ze kunnen voorkomen.
Linkerfouten treden op wanneer de linker alle onderdelen van een programma probeert samen te voegen tot
een uitvoerbaar bestand en er één of meer onderdelen ontbreken.
Meestal gebeurt dit wanneer een objectbestand of bibliotheken niet gevonden kunnen worden door de linker.
Linkerfouten herstellen kan lastig zijn.
Soms is het gewoon een kwestie van de juiste paden, zodat de linker weet waar de ontbrekende
stukken zijn.
Laten we naar code light gaan en een programma dwingen een linkerfout te maken, zodat je kunt zien hoe
de foutmelding eruit ziet.
De voorbeeldcode hier, negeer de syntaxis.
Dit is eigenlijk C plus plus code, maar het is nog steeds relevant voor linkerfouten.
Maak je geen zorgen over de iostream.
Maak je geen zorgen over de stdcout.
Het hoofdidee hier is dat koppelingsfouten hetzelfde zijn in C en C plus plus.
En het coderingsvoorbeeld hier is alleen bedoeld om opnieuw een linkerfout aan te tonen.
Dus ik ben in code light en heb een project gemaakt genaamd Linkerfout, gebaseerd op het sjabloon dat we gebruiken.
Dus alles wat ik heb is een Main. cpp bestand dat Hello world zegt.
Nu gaan we hier een linkerfout forceren.
Dit is niet iets wat je normaal gesproken wilt doen, maar ik wil het doen om je te laten zien hoe de fout eruit
ziet.
Dus wat ik ga zeggen is dat ik extern int c of laten we gewoon X zeggen en ik zal dit alles zo
meteen uitleggen.
En dan in het hoofddeel, wil ik proberen die X daar te gebruiken.
Het is gewoon een geheel getal en laten we zeggen dat ik het wil afdrukken.
Ik wil gewoon X afdrukken, zo simpel is het.
Ik ga dit bewaren.
Als ik dit programma compileer, zul je zien wat er gebeurt.
Ik ga rechts klikken op compileren.
Ik krijg een schone compilatie.
Er is niets mis met het programma, maar als ik het probeer te bouwen en uit te voeren.
Je kon de linker fout zien.
Dit is een klassieke linker fout.
Ongedefinieerde verwijzing naar iets.
In dit geval is het toevallig x.
Je zult ook zien dat de linker hier één teruggaf.
LD geeft één terug, dat is de uitgangsstatus.
Dus er was iets mis met de link.
Kennelijk was de compiler in orde, want we kregen geen compilerfouten.
Dat doen we weer.
Daar is het compileren.
Geen fouten, geen waarschuwingen.
Dus laat me je uitleggen wat hier aan de hand is.
Ik pak even snel mijn stylus.
En wat hier gebeurt is dat ik mijn hoofd CPP bestand hier heb en het wordt gecompileerd naar main dot zero, laten we zeggen,
of main dot object.
Hier hebben we een verwijzing naar een EXE.
Je kunt het daar zien.
Dus hier heb ik een verwijzing naar een exe, die ik ga gebruiken.
Nu hebben we ook onze O stream bibliotheken, dus de linker moet die bibliotheken pakken en ik typ hier i
o stream zodat je weet waar ik het over heb.
De linker moet deze twee samenvoegen om mijn hoofd exe te maken.
Of in dit geval denk ik dat het linker error exe is.
Maar je weet wat ik bedoel.
Dus het compileren gaat goed.
We hebben ons object bestand gemaakt.
Deze bibliotheek bestaat.
Het probleem is dat ik de compiler hier verteld heb dat deze x niet in mij zit.
Het is ergens anders.
Het wordt gedefinieerd door iemand anders.
Nou, het is duidelijk niet gedefinieerd door iemand anders, want dat forceert de kwestie hier.
Dus nu moet de linker die X oplossen, Hij zegt, oké, waar haal ik die waarde vandaan om af te drukken?
Want dat is wat je me vroeg om hier te doen, toch?
Ik wil dat de waarde van x wordt afgedrukt.
Waar is x?
Het kan het niet vinden.
Dat is de linker fout.
Dat is precies wat er aan de hand is.
En laat me dit opnieuw bouwen zodat je de foutmelding nog een keer kunt zien.
Het is bouwen en uitvoeren.
En daar is de foutmelding.
Het zegt een ongedefinieerde verwijzing naar X.
Je kunt precies zien wat er aan de hand is.
Het kan X niet vinden.
Dit is geen compilerfout.
Dit is een linker fout.
Dat is echt belangrijk om te begrijpen.
Linkerfouten zijn lastig te herstellen.
Vaak ontbreken de bestanden die je moet koppelen.
Ze zitten op de verkeerde plaatsen.
Je hoeft je daar geen zorgen over te maken met code light in deze cursus, we gaan in principe
alles zelf doen.
Maar als je bibliotheken van derden gebruikt, is dit het soort dingen waar we het in een meer gevorderde
cursus over zullen hebben.
Maar ik wilde je gewoon de linkerfouten laten zien voor het geval je er toch een tegenkomt, post hem in het
forum en we werken er samen aan.