vrijdag 6 maart 2020

Interludium [ De framboos aka Raspberry Pi : de finale , de foutopsporing van het compileren.]

Foutopsporing.

Hiervoor ben ik enkele dagen in de weer geweest.
Eerst uitzoeken hoe het make script in elkaar zit , dan opzoeken waar het script naar verwijst en dan proberen te interpreteren hoe alles aan elkaar hangt.
Ik moet zeggen dat ik alles eerst nog eens naar een raspberry 2 overgezet hebt , maar daar dook hetzelfde probleem op.

Kort analyse van het make-script ( Makefile). ik ga hier niet in detail wat al die argumenten doen maar enkel de hoofdbrok.

In weze is het script zo opgebouwd:


target:afhankelijkheden
<TAB> recept

<TAB> of inspringen is verplicht !

Hieronder een voorbeeld uit een extract van de Makefile:

dump1090 is hier het target en alle bestanden met .o zijn de afhankelijkheden
vanaf $(CC) komt het recept ( hier aanroepen van de compiler en de nodige bibliotheken ($(LIBS))

dump1090: dump1090.o anet.o interactive.o mode_ac.o mode_s.o net_io.o
          $(CC) -g -o dump1090 dump1090.o anet.o interactive.o mode_ac.o mode_s.o net_io.o $(LIBS) $(LDFLAGS)


$(LIBS) is eigenlijk een variabele die hogerop is gedeclareerd ( hier niet te zien) maar hieronder toch opnieuw is weergegeven

LIBS=`pkg-config --libs librtlsdr` -lpthread -lm

Hierbij is de verwijzing naar de pkg-config van groot belang.
pkg-config is in feite een soort script dat de bibliotheken weet zitten .
Elk operatingssyteem heeft zijn eigen architectuur aan boord ( bv een x86-64 of  in dit geval bij de rpi  een ARM processor.)
Afhankelijk van deze arch. moet er anders gebuild worden .
Om uw software voor alle van deze architecturen te kunnen laten werken is er een " agent" nodig die u de weg wijst.
Deze verwijzing voor de bibliotheek van de  rtl-sdr  zit in een bestand dat librtlsdr.pc   zit . Het is dit bestand dat nodig is om juist te kunnen compileren.
Alle verwijzingen voor de pkg-config hebben een extensie die eindigt op .pc 

Eerst zoeken we waar  librtlsdr.pc   zich bevindt.Vanop de root zoeken we met

sudo find -name librtlsdr.pc

Het antwoord ziet U hieronder



Er zijn meerdere antwoorden ,maar  /usr/local/lib/pkgconfig is het juiste.

Let ook op dat pkgconfig ook in het pad zit !

We gaan naar daar met :
 cd /usr/local/lib/pkgconfig

en kijken wat er in librtlsdr.pc zit met

 cat -n  librtlsdr.pc



 

 Deze ziet er nogal leeg uit vind ik , vergelijk hem eens met het bestand dat op mijn linux desktop staat. Let ook op het andere pad in de desktop !


Hier zijn wel de eerste regels ingevuld !


Hier moet iets aan gedaan worden , dit is in een volgende aflevering.
eerst koffie drinken ;)

Geen opmerkingen:

Een reactie posten