Go Down

Topic: Linker-Error beim Einbinden eigener Bibliotheken (Read 846 times) previous topic - next topic

Tobinator

Hallo,

ich habe meinen Code in Visual Studio Code geschrieben und würde gern ein paar Teile in separate Bibliotheken auslagern.
Hier mein Code (Minimalbeispiel):

app.ino
Code: [Select]

#include "lib/tools.h"

void setup(){
  tools::init();
}

void loop(){
}


tools.h
Code: [Select]

#ifndef TOOLS_H
  #define TOOLS_H

  #include <SPIFFS.h>

  class tools{
    public:
      static void init();
      ...

  };
#endif


tools.cpp
Code: [Select]

#include "tools.h"

void tools::init(){
  SPIFFS.begin(true);
}


Beim Kompilieren bekomme ich immer einen Linker-Error:

sketch\app.ino.cpp.o:(.literal._Z5setupv+0x0): undefined reference to `tools::init()'

sketch\app.ino.cpp.o: In function `setup()':

.../app/app.ino:14: undefined reference to `tools::init()'

collect2.exe: error: ld returned 1 exit status

exit status 1

Wenn ich statt "lib/tools.h" die cpp-Datei "lib/tools.cpp" einbinde, dann funktioniert es, aber dann wird ja immer alles kompiliert (nach meinem Verständnis)...

Normalerweise muss ich das doch irgendwo beim Kompiler nochmal angeben, oder? Aber ich finde nichts...

Die Fehlerausgabe ist in der Arduino IDE und in Visual Studio Code die gleiche.

Kann mir jemand helfen?

combie

Mir kommt spanisch vor. dass du das in einen lib Ordner gestopft hast...

Wo ist der?
Gefährlich, was Theorien aus Menschen machen können.
Schlimmer, was Menschen aus Theorien machen.

Tobinator

Das ist mein eigener Ordner, in den ich mehrere Bibliotheken auslagern will.

Meine Ordnerstruktur:

/app
  app.ino
  /lib
     tools.cpp
     tools.h

combie

#3
Oct 24, 2018, 10:04 pm Last Edit: Oct 24, 2018, 10:10 pm by combie
Das funktioniert so nicht wirklich...
Bei Arduino hat die Library Struktur schon was Besonderes...
Der Arduino Builder möchte es anders
Es gibt ja auch kein Makefile, oder so.

Für Experimente ist folgende Struktur praktikabel
sketchbook/app
 app.ino
 tools.cpp
 tools.h


Später dann als Library: (alter Stil)

sketchbook/app
 app.ino

sketchbook/libraries/tools
 tools.cpp
 tools.h

Im nächsten Schritt den modernen Stil



https://www.arduino.cc/en/Guide/Libraries
https://www.arduino.cc/en/Hacking/LibraryTutorial
Gefährlich, was Theorien aus Menschen machen können.
Schlimmer, was Menschen aus Theorien machen.

Tobinator

Alles klar, vielen Dank.
Genau das war der Fehler. Jetzt funktioniert es :)

Go Up