Geany und die Header / Libraries :0

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo Forum - kurz zu mir: mein Name ist Hansjoerg und ich komm aus dem schönen Schoabaländle!

    Seit einer Woche habe ich den RasPi 2 und möchte ganz gerne mit OpenGL ES den Einstieg machen ( ich bin eigentlich Mechanikus aber versuchen wollte ich mich schonmal...)

    Als IDE habe ich Geany installiert - allerdings habe ich das Problem, dass ich die unter /opt/vc/include liegenden Headerfiles bzw deren Directories
    in Geany nicht finde, bzw Geany bei jedem versuchten built/ compile erneut beteuert, das es kein solches File gibt.....

    ( habe ein einfaches "Hello World" aufgesetzt und dann außer der stdio.h noch versucht die EGL/egl.h die GLES2/gl2.h und GLES2/gl2ext.h zu includieren
    - die erste Datei ging anstandslos - die anderen verweigert Geany!

    das "make" im Terminal an den Beispiel-Files läuft einwandfrei durch
    aber ich hätte es gerne innerhalb der IDE gelöst..

    Entschuldigt bitte, aber LINUX war bisher " der Feind" - ( das hier scheint so eine Art Stockholm Syndrom zu sein)

    Was ich bisher versucht habe, ist die 2 Directories wie die Headerfiles solo in den Zugriffsbereich von Geany /usr/include zu kopieren /usr/include/ - kein Erfolg

    und die Befehlszeile für den Compiler um den Tag -lm zu erweitern ( hatte ich irgendwo gelesen) - allerdings auch erfolglos - vielleicht hat jemand von Euch einen Tip für mich?


    Vielen Dank im Voraus!

    Hansjoerg

    Einmal editiert, zuletzt von Optimist (8. November 2015 um 17:29)

  • Woher haben die Leute eigentlich immer die Vorstellung, geany sei eine IDE? Geany selbst schlaegt vor, fuer das erstellen von C/C++-Projekten make zu verwenden. Das wuerde ich nun nicht machen, weil's mir etwas zu primitv ist - stattdessen verwende ich zb cmake (+ make danach, aber das ist ein detail).

    Und damit kann man dann fuer definierte targets include-directories und zu linkende Libraries angeben.

    Hier zb ein kleines Testprojekt fuer meine MPU6050 IMU als CMakeLists.txt


    Da siehst du zB fuer ein ausfuehrbares Programm "mpu6050-broadcaster" einen Eintrag

    Code
    target_include_directories(
            mpu6050-broadcaster SYSTEM PRIVATE
            src
            "${JSONCPP_INCLUDE_DIRS}"
            "${EIGEN3_INCLUDE_DIRS}"
    )

    Das bedeutet, dass die Verzeichnisse "src" (relativ zum CMakeLists.txt) sowie welche per pkg-config zusammengesammelte hinzufuegt. Das kannst du stattdessen machen mit direkt eingetragenen "/opt/vc/include" (ohne Anfuehrungszeichen).

    Genauso musst du dann in der target_link_libraries Sektion deine Bibliotheken angeben - das ist ueblicherweise der Name der Bibliothek ohne fuehrendes lib und ohne ".so"-Geraffel.

    Falls die nicht gefunden werden, musst du ggf. noch mit [font="sans-serif"]link_directories(directory1 directory2 ...) nachhelfen.[/font]

    Klingt kompliziert? Ist es auch :) C++ build systeme sind zum kotzen. Was ich fuer meine 3D-Experimente auf dem PI stattdessen benutze ist die Urho3D-Engine. Die liefert schon ein komplettes cmake-basiertes System mit, und jede menge andere tollen Kram auch.

  • Das war jetzt wohl der Neulingsschock für mich ... ich komm wie solls anders sein vom Visual Studio Express - da habe ich das Teil schon laufen - muss es aber fürs RasPi auf das OpenGL ES runterbrechen.

    Wenn ich jetzt Geany nur das "Hello World" vorgebe brauch ich dafür ja schon die stdio.h da muss ich aber kein makefile machen, die Headerdatei zieht er sich selber ... nur bei den EGL und GLES tut er es nicht - wo bleibt den da die konstanz

  • Na, stdio ist ja schon dem Namen nach ein Standardheader. Und auch unter VS musst du externe Bibliotheken explizit einbinden - halt mit einem GUI (das ich persoenlich zum heulen finde).

    Das Makefile brauchst du auch nicht, alles was du wirklich, wirklich brauchst wenn du kein build-system willst ist "g++ -I/opt/vc/include -L/opt/vc/lib -lGLES" etc... aber die einzelnen -L (Bibliothekspfad) und -l (Bibilotheksname) sowie -I (Include-Pfad) musst du schon selbst rausfummeln - da gibt es keine Magie, vor allem nicht bei nicht-Standard-Orten wie /opt/vc. /usr/lib|include sowie /usr/local/include|lib sind ja dabei.

  • Sowas gibt es da nicht. Schreiben sie ganz explizit im Manual. Und frueher oder spaeter willst du ein Build-System - besonders auf der kleinen Kiste. Denn immer alles bauen, weil man keine vernuenftiges Dependency-Checking hat, geht auf Dauer auf die Nerven :)

  • Aallssooo - anlaufen tuts aber während des makes hat er so 20-30 undefined references aufgelistet

    z.B.:
    .././libEGL.so undefined reference to 'glxx_Client framebufferTexture2D

    liegt das daran weil ich die GLES2 Bibliotheken noch nicht eingebunden habe oder weil ich die include in "main" noch nicht verwende?

    als Windows - Anwender habe ich mich bisher leider nie so tiefgründig mit der Dateistrukturen und Beziehungen auseinandersetzen müssen - ich bin also noch beim Versuch um zu Verstehen - bitte hackt nicht auf mir rum ich wills ja wissen..... .....

    OK jetzt habe ich die libGLESv2 auch eingebunden die undefined references sind weg war also auf dem richtigen Weg... allerdings kommt jetzt unten die Meldung

    undefined referenec to 'main'

    collect2: error: ld returned 1 exit Status - warum versteh ich nicht sollte doch egal sein ob ich die includes nun nutze oder nicht

    Die Makefile - Zeile sieht jetzt so aus:

    All:
    gcc -o Robbysim -I/opt/vc/include -L/opt/vc/lib -lEGL -lGLESv2


    Mein Fernziel: https://www.youtube.com/watch?v=evt_9DVsy2g
    Der Robby läuft momentan noch mit nem Arduino clone und Marlin - 3D Drucker Software . allerdings sind ein paar Fehler drin und ich wuerde die Steuerung auch gern selberschreiben.

    Einmal editiert, zuletzt von Optimist (9. November 2015 um 19:58)

  • Du musst unterscheiden zwischen komplilieren und linken. Deine Probleme liegen an letzterem. Mit includes - wie du das vermutest - hat linken aber nichts zu tun, das gibt's zu dem Zeitpunkt ueberhaupt nicht mehr.

    Wenn du ein Programm erstellen moechtest (und so klingt das ja), dann *MUSS* das Programm immer eine main-Funktion fuer den Einsprung haben. Manchmal musst du den nicht selbst vorsehen, wenn du zB googletest als Test-Bibliothek benutzt - das bringt dann eine mit. Aber das nur am Rande.

    Du hast offensichtlich keine solche Funktion, also musst du eine dazu packen.

    Deine Kommandozeile finde ich selbstam. Was macht der "-" da, und wie heisst denn das Source-File? Robbysim ohne Endung wie cc, cpp? Das solltest du so nicht machen, das versteht sonst keiner, weder Mensch, noch andere Tools wie zB die schon mehrfach angesprochenen Build-Systeme.

  • sollte -o sein um den Binary Namen zu definieren!( bzw in der Originalzeile ist es das auch!) die Beispiele die ich gelesen habe haben alle hinter -o <Name > keine Endung

    Mein Programm hat eine main Schleife zwar nur (void) -ist aber vorhanden!

    Steht halt erstmal nur die
    {
    printf ( "Hello World /n" );

    return 0
    }

    drin

    Einmal editiert, zuletzt von Optimist (9. November 2015 um 20:09)

  • Was ist denn eine "main"-Schleife? So etwas gibt es nicht. Fuer -o braucht man keine Endung, natuerlich nicht. Aber wenn das deine gesamte Anweisung ist, dann kompilierst du doch ueberhaupt nix. Da fehlt wahlweise ein Sourcefile (*.cpp oder so), oder eines bis viele *.o-files (schon uebersetzte Source-Files). Aber fuer die musst du dann auch Anweisungen in deinem Makefile haben.

    Denn sonst wird dein eigener Code (mit "Schleifen" und so....) gar nicht in das Executable gepackt.

  • Ohhh jeee - mea culpa! am Anfang wars drin aber irgendwie isses aus der Zeile rausgerutscht ohne dass ich es gemerkt habe.... -o Robbysim A1.c und dann das Weitere

    Fehler habe ich zwar immernoch aber ehr der Natur, dass die egl.h intern andere include Dateien anzieht, welche dann wieder nicht gefunden werden .

    Reicht es, wenn ich mich durchhangle und alle includes an denen er rummäkelt suche und in das Makefile - genauso wie die egl eintrage ? - wird dann wohl eine sehr lange Zeile....


    noch zwei weitere Einträge für die includes waren es ---Er hats gefressen! :)

    Binary erzeugt läuft auch !!!


    DANKE für Deine Geduld!!!!


    Gruss Hansjoerg

    Einmal editiert, zuletzt von Optimist (9. November 2015 um 21:35)

  • Hänge immernoch bei den Headern in Visual Studio Express gab es ein ganze Reihe

    wie

    cstdlib.h
    fstream.h
    iostream.h
    conio.h
    io.h
    nur wo finde ich irgend ein Dokument um auf die Entsprechungen zu schließen

    Ziele wären lesen und schreiben in und aus Dateien und Stringmodifikationen

    weiter später Tastatursteuerung

    Vielleicht hat mir irgendjemand einen Tip?

    Danke im Voraus

    Hansjoerg

Jetzt mitmachen!

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