- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 10 von 13

Thema: Arduino IDE (Linux), DUE C++ Linken geht nicht

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    10.04.2005
    Ort
    Bad Aibling
    Beiträge
    212

    Arduino IDE (Linux), DUE C++ Linken geht nicht

    Hi, Mädels ... Jungs ...

    Das die Arduino IDE 1.6.3 einen C++11 Code compiliert habe ich schon gefunden. Dazu habe ich in der Datei .arduino15/packages/arduino/hardware/sam/1.6.4/platform.txt eine Zeile so umgeschrieben: compiler.cpp.extra_flags=--std=c++11. Ich finde aber irgendwie nicht wie man der Arduino IDE bei bringt den C++ Code auch so zu linken. Ich bekomme für einen std::basic_string die Fehlermeldung undefinded reference.

    So sieht die Zeile aus die die Meldung verursacht: std::string strMsg = "";

    Die Arduino IDE ist ein bisschen seltsam weil man nicht mal eine Fehlermeldung kopiern kann ...

    Grüße
    Alexander

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    04.09.2011
    Ort
    Hessen
    Beiträge
    707
    Hallo,

    ja, man kann zwar den Compiler dazu bringen C++11 zu verwenden, aber die C++ Standardbibliothek bringt die Arduino IDE nicht vollständig mit.
    Deswegen bleibe ich lieber bei mbed, das ist zwar nur C++03, aber wenigstens mit Bibliotheken.

    Ich wollte bei Gelegenheit mal testen, ob man z.B. mit dem hier
    http://platformio.org/#!/
    C++11 Code auf den Due bringen kann. Das verwendet für mbed und Due den gleichen Compiler. Damit sollte eigentlich mehr Infrastruktur vorhanden sein.
    Allerdings, wie hier schon als Frage gestellt, ist das Tool keineswegs perfekt. Unter Linux kriege ich die ARM-Targets nicht damit zum laufen.
    Im Moment fehlt mir sowieso die Zeit dafür ...

  3. #3
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    10.04.2005
    Ort
    Bad Aibling
    Beiträge
    212
    Ich weiss nun nicht genau wie gut die ARM Prozessoren untereinander kompatibel sind. Aber könnte man sich die C++ Standardbibliothek nicht einfach bei eim ARM Zweig einer Linux Distribution kopieren und verwenden?

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    04.09.2011
    Ort
    Hessen
    Beiträge
    707
    Wahrscheinlich gibt es da Probleme mit den Binärdaten der Bibliotheken. Die C++ Compiler auf (oder für) die Cortex-A Prozessoren sind ja meistens für das armhf- (Hardfloat) oder armel-Format. Die Cortex-M Entwicklungsumgebungen verwenden ja normalerweise den gcc-arm-none-eabi.

    Es würde schon gehen, wenn man das komplette Compilerpaket installiert. Unter Windows kriegt das oben verlinkte Python Script das ja hin. Es lädt Compiler (für AVR und ARM-none), Bibliotheken (Arduino oder mbed) und diverse Tools (wie Avrdude, bossac usw.) herunter und installiert sie. Man kann Arduino Sketche und mbed-Programme auf der Kommandozeile erstellen und auf die Controller übertragen.

    Ich hätte ja erwartet, dass ein Python-Script unter Linux besser läuft. Auch wird da ja mit Rasperry Pi und Beaglebone geworben. Unter Debian werden Programme für den Due ja auch übersetzt. Nur dann kommt der Linker nicht weiter. Unter Arch Linux auf dem Raspi 2 gibt es noch mehr Probleme, weil Python 3 da ja der Standard ist. Man kriegt es zwar mit Python 2 installiert, aber bei der Aufführung kommen dann doch wieder Syntaxfehler. Bin halt nicht so der Python Experte. Aber im Prinzip steht alles in dem Skript, was Du wissen musst.

  5. #5
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    10.04.2005
    Ort
    Bad Aibling
    Beiträge
    212
    Also armhf und armel sagt mir was. Ich habe zwar nach längerer Suche gefunden was es heißt: EABI (embedded application binary interface) aber richtig vorstellen was es ist kann ich mir noch nicht. Ist da sowas gemeint wie unter Linux das ELF Format?

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    04.09.2011
    Ort
    Hessen
    Beiträge
    707
    Im Prinzip ja, aber es geht noch eine Ebene tiefer. Dass es in C++ keine standardisierte ABI gibt, ist die Ursache dafür, dass man auf diversen Systemen keinen Binärcode von verschiedenen C++ Compilern mischen darf. Unterschiedliche Compiler können Klassen unterschiedlich binär darstellen.

    Siehe auch Wikipedia
    Eine ABI gilt manchmal nur für eine Programmiersprache bzw. einen Compilertyp, da die Regeln, wie beispielsweise aus einer Funktionsdefinition ein symbolischer Name werden soll, sprachabhängig sind.
    http://de.wikipedia.org/wiki/Bin%C3%A4rschnittstelle

    Um zum Thema zurückzukommen:

    Ein Weg zu C++11 auf dem Due wäre eventuell Atmel Studio. Da kann ich aber nicht sagen, wie weit man dass mit Arduino Code kombinieren kann.

    In der Arduino IDE (ich hab das damals mit 1.5.x getestet) bleiben einem Dinge wie constexpr, range based for, lambda funktionen, auto und alles mit templates, das keine Standardbibliothek benötigt.

Ähnliche Themen

  1. Erfahrungen/Tutorial: Programmierung von Arduino Due + entspr. IDE?
    Von Ford Prefect im Forum Arduino -Plattform
    Antworten: 0
    Letzter Beitrag: 18.06.2014, 10:07
  2. Arduino IDE startet (schon wieder) nicht
    Von robo_tom_24 im Forum Arduino -Plattform
    Antworten: 0
    Letzter Beitrag: 27.11.2012, 21:56
  3. Arduino IDE startet nicht
    Von robo_tom_24 im Forum Arduino -Plattform
    Antworten: 11
    Letzter Beitrag: 01.10.2012, 14:54
  4. Antworten: 19
    Letzter Beitrag: 12.11.2011, 14:41
  5. RP6: Linux make geht nicht
    Von TedRobby im Forum Robby RP6
    Antworten: 7
    Letzter Beitrag: 12.08.2007, 18:50

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests