2017-04-16 1 views
0

Ich benutze Ubuntu Linux, Eclipse Neon und die Arm-Linux-gnueabihf Tool-Kette, um Anwendungen für den Raspberry Pi zu kompilieren. Eclipse funktioniert im Allgemeinen gut dafür. Ich bin in der Regel in der Lage, kompilieren und verknüpfen Sie die App, scp es mit dem RPi und führen Sie es auf dem RPi.Verknüpfen von CGICC in Eclipse mit Gnueabihf Cross-Tool-Kette

Ich musste vor kurzem die CGICC-Bibliothek hinzufügen. Ich habe zuerst die Bibliothek auf dem Pi installiert und dann eine einfache C++ - App erstellt, gebaut und auf dem RPi ohne Probleme ausgeführt. Das besagt, dass die Bibliothek ordnungsgemäß auf dem RPi installiert ist.

Ich wollte dann die Bibliothek auf die Linux-Maschine kopieren, damit ich sie bei der Entwicklung auf dem Linux-Rechner für die auf dem RPi ablaufenden Apps verwenden konnte. Also habe ich die folgenden Dateien vom RPi auf den Linux-Rechner kopiert:

/usr/include/cgicc Ordner von RPi nach/usr/arm-linux-gnueabihf/include auf Linux-Rechner. Dies kopierte 28 Dateien vom RPi in einen neuen CGICC-Ordner, der sich in/usr/arm-linux-gnueabihf/include befindet. Der Linux-Rechner sollte jetzt alle Include-Dateien haben.

/usr/lib/libcgicc*.* Dateien (3 Dateien) von RPi nach/usr/arm-linux-gnueabihf/lib auf Linux-Rechner. Das RPi hatte auch 2 symbolische Links. Ich habe die Symlinks auf dem Linux-Rechner erstellt. Zu diesem Zeitpunkt scheint die Bibliothek vom RPi auf den Linux-Rechner migriert worden zu sein.

in Eclipse habe ich ein einfaches Projekt:

#include <iostream> 
#include <cgicc/CgiDefs.h> 
#include <cgicc/Cgicc.h> 
#include <cgicc/HTTPHTMLHeader.h> 
#include <cgicc/HTMLClasses.h> 

using namespace std; 
using namespace cgicc; 

int main() { 
    cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!! 

    Cgicc formData; 
    form_iterator fChannel = formData.getElement("servochannel"); 

    if (fChannel != (*formData).end() && !fChannel->isEmpty()) { 
     int channelNumber = atoi(fChannel->getValue().c_str()); 
    } 

    return 0; 
} 

Und ich setzen die Projekteigenschaften wie folgt: C/C++ Build/Settings/Cross G ++ Compiler/Schließt das Verzeichnis/usr/Arm-linux-gnueabihf /einschließen. C/C++ Build/Einstellungen/Cross G ++ Linker/Bibliotheken zu cicc und Bibliothek Suchpfad zu/usr/arm-linux-gnueablihf/lib.

Cross G++ Compiler Includes Settings Gross G++ Linker Libraries Settings

Wenn ich ein Projekt erstellen, erstellt das Projekt aber der Linker zwei Fehlermeldungen führt:

undefined reference to cgicc::Cgicc::getElement undefined reference to cgicc :: :: getValue Formentry

Es ist nicht sich über die Zeile in der Quelldatei "Cgicc formData" beschweren; aber es beschwert sich über jede andere Linie in Bezug auf CGICC.

Also, was mache ich falsch? Ich kämpfe jetzt seit einer Woche und suche den Stack-Overflow und anderswo. Ich hoffe, dass jemand hier mir helfen kann. Ich bin es leid, das RPi bearbeiten, erstellen und testen zu müssen.

Antwort

0

LÖSUNG GEFUNDEN!

Das Problem bestand darin, dass die Bibliotheken auf dem RPi mit einer anderen Version des GCC-Compilers kompiliert wurden als auf dem Eclipse-Computer. Die RPi-Version konnte nicht auf der neueren Version auf der Eclipse-Maschine aktualisiert werden und umgekehrt. Das bedeutete, dass die Schnittstellen zwischen dem kompilierten Code und der Bibliothek inkompatibel waren, was zu den Bibliotheksproblemen führte, die ich erlebte.

Die Lösung war, die neueste Version der Cgicc-Bibliothek auf die Eclipse-Maschine herunterzuladen und die Bibliothek mit dem Armhf-Cross-Compiler zu erstellen. Dies stellt die gleichen Versionen der Bibliothek sowohl auf dem RPi als auch auf dem Entwicklungscomputer bereit.

Seit cgicc Automake- verwendet, die richtigen Befehle wurden wie folgt:

./configure CXX=arm-linux-gnueabihf-g++ libdir=/usr/cgicc/lib includedir=/usr/cgicc/include 
make 
sudo make install 

Dann Eclipse-konfiguriert werden, müssen für die Include- und Bibliotheks-Dateien im Verzeichnis/usr/cgicc/und/usr/cgicc aussehen/lib Ordner.

Danach konnte ich meine App erstellen, scp es in den Ordner/usr/lib/cgi-bin auf dem RPi, und führen Sie es aus.