Einbinden mehrerer Libs ins Makefile

  • Ich habe ein Programm geschrieben, das mit Hilfe der bcm2835.h auf die SPI-Schnittstelle zugreift. Mit diesem Makefile hier hat das auch super funktioniert:

    Jetzt habe ich mich um die GUI mit für die Software mit GTK+ gekümmert und dafür dieses Makefile genutzt:

    Nun scheitere ich allerdings daran, beide Makefiles zu kombinieren, da ich nun sowohl die GTK-Files, als auch die bcm2835.h in einem einzigen Programm benötige.

    Ich habe schon versucht "-lbcm2835" einfach in die Zeile "LIBS = `pkg-config --libs gtk+-3.0`" anzuhängen, aber das hat leider nicht gebracht, ich bekomme beim Kompilieren immer einen Fehler: "undefined reference to `bcm2835_init'
    Ich kann also keine Funktionen aus der Lib aufrufen.

    Mein zweiter Ansatz war eine weitere Zeile im Makefile:

    Code
    BCMLIB   = -lbcm2835


    Und dann die den Kompilierbefehl darum ergänzt:

    Code
    Data_logging : Data_logging.o 
       $(CC) $(LIBS) $(BCMLIB) -o Data_logging Data_logging.o

    Aber das bringt mich auch nicht weiter... Kann mir jemand erklären, wie ich das zum laufen bekomme?

  • Die Version mit dem BCMLIB sieht eigentlich gut aus. Was funktioniert denn nicht ?

    Auf die Schnelle:

    Code
    Data_logging : Data_logging.o 
       $(CC) $(LIBS) -lbcm2835 -o Data_logging Data_logging.o

    Und um herauszufinden warum die andere Version nicht geht:

    Code
    Data_logging : Data_logging.o
       echo $(CC) $(LIBS) $(BCMLIB) -o Data_logging Data_logging.o
       $(CC) $(LIBS) $(BCMLIB) -o Data_logging Data_logging.o
  • Bei der Version mit BCMLIB habe ich den gleichen Fehler wie bei dem ersten Versuch.

    Ich habe mal deine "Debug-Version" ausprobiert, die Meldung ist folgende:

    Einmal editiert, zuletzt von EGSler (16. Dezember 2014 um 11:55)

  • Ja, die bcm2835 ist installiert.
    Ich kann auch das andereProjekt mit oben genanntem makefile problemlos kompilieren, da wird die bcm-bib eingebunden und alle Funktionen daraus funktionieren...

    Was meinst du mit der Frage, wo die steht?

    Grüße

  • Das schreibe ich einfach direkt vor -lbcm2835, nicht wahr?
    Also:

    Code
    BCMLIB = -L/usr/local/lib -lbcm2835

    Das ändert aber leider auch nichts. Man, das kann doch nicht so schwer sein, so eine Lib einzubinden^^

  • Hm ... dass das mit den Libs gleich hinter dem Compiler-Aufruf nicht funktioniert - darauf wäre ich jetzt, ehrlich gesagt, nicht gekommen.
    Ich schreib die immer automatisch als letztes in die Kommandozeile.
    Ach ja: wenn das so ist, dann wirst Du vermutlich die gtk-libs auch nach hinten schieben müssen, sobald Du Funktionen daraus verwendest.

    Aber prima ... schön, dass es jetzt funktioniert,
    -ds-

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!