Forum: PC-Programmierung Eclipse: ode.h wird nicht gefunden


von Eclipse-Neuling (Gast)


Lesenswert?

Hallo!

Ich möchte die Physik-Engine ODE in Eclipse verwenden, aber leider wird 
ode.h in Eclipse nicht gefunden.

Ich benutze Eclipse Photon (4.8.0) unter Ubuntu. Ich habe ODE 0.16 
bereits mit make und make install installiert.

In Eclipse habe ich ein Projekt mit einem C++ Programm angelegt, das ODE 
verwendet.
Leider erscheint in der Zeile
1
#include <ode.h>
der Fehler
1
fatal error: ode.h: Datei oder Verzeichnis nicht gefunden


Unter Project -> Properties -> C/C++ Build -> Cross G++ Linker -> 
Libraries habe ich bei Libraries (-l) "ode" eingetragen (ich habe es 
auch schon mit "ode.h" versucht).
Bei "Library Search Path (-L) habe ich "/home/user/ode-0.16/include/ode" 
eingetragen (in diesem Ordner befindet sich ode.h).

Ich kann nicht nachvollziehen, wieso die ode.h-Datei nicht gefunden 
wird. Kennt sich hier jemand aus und kann mir weiterhelfen?

von martin (Gast)


Lesenswert?

Ich denke du musst die datei mit "" includen, damit der compiler in 
deinen Verzeichnissen sucht.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Eclipse-Neuling schrieb:
> Unter Project -> Properties -> C/C++ Build -> Cross G++ Linker ->
> Libraries habe ich bei Libraries (-l) "ode" eingetragen


Da eine *.h-Datei keine Library ist, ist das der komplett falsche Ort 
dafür.

Du musst den Ort, an dem die Datei zu finden ist, in den Include-Pfad 
(Option -I) aufnehmen.

Oder die Datei dort ablegen, wo der Rest Deines Programmes zu finden 
ist, und die Datei mit #include "ode.h" einbinden (Anführungszeichen 
statt Spitzklammern).

von Eclipse-Neuling (Gast)


Lesenswert?

Vielen Dank für die schnelle Antwort!

Rufus Τ. F. schrieb:
> Da eine *.h-Datei keine Library ist, ist das der komplett falsche Ort
> dafür.

Danke für die Info, ich habe leider noch kaum Erfahrung mit C++

Rufus Τ. F. schrieb:
> Du musst den Ort, an dem die Datei zu finden ist, in den Include-Pfad
> (Option -I) aufnehmen.

Wo genau mache ich das?
Unter Properties -> C/C++ Build -> Settings gibt es unter Cross GCC 
Compiler und unter Cross G++ Compiler jeweils einen Unterpunkt 
Includes, wo man Include paths (-I) und Include files (-include) angeben 
kann.
Ich habe jetzt bei beiden Includes folgendes eingetragen:

->in Include paths (-I) "/home/user/ode-0.16/include/ode"

und

->in Include files (-include) "/home/user/ode-0.16/include/ode/ode.h".

Es erscheint bedauerlicherweise immer noch der selbe Fehler.

Leider weiß ich auch nicht, welcher Compiler aktuell verwendet wird, 
kann man das irgendwo sehen?

von Eclipse-Neuling (Gast)


Lesenswert?

Ich habe jetzt meine Eintragungen unter Cross GCC Compiler entfernt, 
also stehen die Pfade nur noch unter Cross G++ Compiler -> Includes.
In Echtzeit wird mir jetzt kein Fehler mehr angezeigt, dafür erscheint 
bei Build folgender Fehler (mein C++ Programm zum Testen heißt 
ODETest2.cpp):


1
19:20:13 **** Incremental Build of configuration Debug for project ODETest2 ****
2
make all 
3
Building file: ../src/ODETest2.cpp
4
Invoking: Cross G++ Compiler
5
g++ -I/home/user/ode-0.16/include/ode -I/home/user/ode-0.16/include -I/home/user/ode-0.16/include/drawstuff -include/home/user/ode-0.16/include/ode/ode.h -include/home/user/ode-0.16/include/drawstuff/drawstuff.h -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/ODETest2.d" -MT"src/ODETest2.o" -o "src/ODETest2.o" "../src/ODETest2.cpp"
6
Finished building: ../src/ODETest2.cpp
7
 
8
Building target: ODETest2
9
Invoking: Cross G++ Linker
10
g++ -L/home/user/ode-0.16/include/ode -L/home/user/ode-0.16/include/drawstuff -o "ODETest2"  ./src/ODETest2.o   -l"ode.h" -l"drawstuff.h"
11
/usr/bin/ld: -lode.h kann nicht gefunden werden
12
makefile:45: recipe for target 'ODETest2' failed
13
/usr/bin/ld: -ldrawstuff.h kann nicht gefunden werden
14
collect2: error: ld returned 1 exit status
15
make: *** [ODETest2] Error 1
16
17
19:20:13 Build Failed. 4 errors, 0 warnings. (took 465ms)

von martin (Gast)


Lesenswert?

laut google: Mit dem Befehl g++ -v bekommt man heraus, welcher 
C++-Compiler zum Einsatz kommt.
include File ist ja nur das ode.h, also dann da -iode.h oder -iode.

von Eclipse-Neuling (Gast)


Lesenswert?

Danke Martin!

martin schrieb:
> include File ist ja nur das ode.h, also dann da -iode.h oder -iode.

Wo -iode angeben? Bei Includes habe ich die Datei direkt ausgewählt im 
"File system...", dann steht dort automatisch .../ode.h

(Oder reden wir aneinander vorbei?)

von martin (Gast)


Lesenswert?

Achso verstehe. Ich bin kein Experte und selber auf die Lösung gespannt. 
Aber was ich sehe ist, dass

g++ -L/home/user/ode-0.16/include/ode 
-L/home/user/ode-0.16/include/drawstuff -o "ODETest2"  ./src/ODETest2.o 
-l"ode.h" -l"drawstuff.h"

mit -l"ode.h" -l"drawstuff.h" nicht klappt.

Und dass
g++ -I/home/user/ode-0.16/include/ode -I/home/user/ode-0.16/include 
-I/home/user/ode-0.16/include/drawstuff 
-include/home/user/ode-0.16/include/ode/ode.h 
-include/home/user/ode-0.16/include/drawstuff/drawstuff.h -O0 -g3 -Wall 
-c -fmessage-length=0 -MMD -MP -MF"src/ODETest2.d" -MT"src/ODETest2.o" 
-o "src/ODETest2.o" "../src/ODETest2.cpp"
Finished building: ../src/ODETest2.cpp

mit u.a. -include/home/user/ode-0.16/include/drawstuff/drawstuff.h 
klappt.


Meiner Meinung nach ist das mit den Pfaden doppelt gemoppelt (dann durch 
Eclipse). Müsste theoretisch nicht auch nur der Pfad reichen?

von martin (Gast)


Lesenswert?

-l"ode.h"

Da steht das l doch dann für LIB. Also *.o und *.a Files. Wenn man die 
header inklusive Pfade übergibt klappt es offensichtlich ja.

von Eclipse-Neuling (Gast)


Angehängte Dateien:

Lesenswert?

martin schrieb:
> Meiner Meinung nach ist das mit den Pfaden doppelt gemoppelt (dann durch
> Eclipse). Müsste theoretisch nicht auch nur der Pfad reichen?

Ich habe jetzt (da anscheinend -include funktioniert hat) die 
Einstellung wie auf dem Screenshot im Anhang gemacht.

Die Datei ode.h wurde dann wohl gefunden, es kamen nämlich ersteinmal 
Fehlermeldungen auf ode.h bezogen. (Dort und in Hilsdateien wurden mit 
#include <ode/*.h> Dateien eingebunden, die sich eigentlich im selben 
Ordner befinden - Ich habe das jeweils in #include "*.h" geändert.)

Jetzt ( also nach dem Korrigieren von #include <ode/*.h> zu #include 
"*.h" in der Datei ode.h und deren Hilfsdateien) kommt leider wieder ein 
Fehler, nämlich
1
fatal error: ode.h: Datei oder Verzeichnis nicht gefunden

von Eclipse-Neuling (Gast)


Lesenswert?

Hallo, darf ich meine letzte Frage noch mal nach oben schieben?


Die ursprüngliche Fehlermeldung (bzw. die Kette von Fehlermeldungen) 
scheint ja nun beseitigt zu sein, siehe hier:
Beitrag "Re: Eclipse: ode.h wird nicht gefunden"


Allerdings geht nach der Beseitigung der Probleme in den Hilfsdateien 
das ganze wieder los:
>fatal error: ode.h: Datei oder Verzeichnis nicht gefunden

Woran könnte das liegen?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Du hättest den Code nicht ändern müssen, sondern nur den Pfad, in dem 
die diversen Dateien liegen, zum Includepfad hinzufügen müssen.

Keine einzelnen Dateien (Dein Screenshot, Du nutzt die untere Hälfte für 
Eingaben), sondern Pfade (obere Hälfte).

Und da das Verzeichnis, in dem ../ode zu finden ist.

Also anscheinend den Pfad

/home/zensiert/ode-0.16/include

Das sollte genügen.

: Bearbeitet durch User
von zitter_ned_aso (Gast)


Lesenswert?

ist es nicht einfacher erst mal in der Konsole zu kompillieren?

Und dann die Pfadangaben in Eclipse übernehmen? (wenn alles 
funktioniert)

von Micha (Gast)


Lesenswert?

Eine Ode an Eclipse

von Carl D. (jcw2)


Lesenswert?

@Eclipse-Neuling:
Auf deinem Screenshot ist oben eine Combobox, die "Debug" Konfiguration 
anzeigt. Include-Pfade sollte man aber nicht für Debug/Release 
unterschiedlich einstellen. Bitte "All configurations" auswählen oder, 
wie es mir häufig passiert, falls der Release-Build längst gelöste 
Probleme meldet, sofort nachschauen, ob man da was schräges konfiguriert 
hat.

von zitter_ned_aso (Gast)


Lesenswert?

Ich bin nach dieser Anleitung

http://www.espore.co.uk/archives/330

vorgegangen und konnte ein Beispiel problemlos kompilieren.

Beim zweiten Befehl

1
g++ -o my_demo demo_buggy.o -lode -ldrawstuff -L ~/ode-0.13.1/ode/src/.libs -L ~/ode-0.13.1/drawstuff/src/.libs -lGL -lGLU -lX11-lpthread

fehlt zwischen
1
-lX11-lpthread
 ein Leerzeichen. Also korrigieren
1
g++ -o my_demo demo_buggy.o -lode -ldrawstuff -L ~/ode-0.13.1/ode/src/.libs -L ~/ode-0.13.1/drawstuff/src/.libs -lGL -lGLU -lX11- lpthread


Einfach nach dem Tutorial vorgehen und nur die Verzeichnisse anpassen 
und es sollte klappen. Zumindest in der Konsole.  Wenn alles läuft, 
kannst du Eclipse konfigurieren.

von Rolf M. (rmagnus)


Lesenswert?

Du bringst da einiges komplett durcheinander.

-include gibt man dem Compiler nur dann ann, wenn man den Header 
nicht per #include-Anweisung im Quellcode einbinden will, sondern 
stattdessen über die Compiler-Kommandozeile. Das braucht man in der 
Praxis eher selten.

-I benutzt man, um dem Compiler zu sagen, wo er die Header findet, wenn 
du ein #include machst. Er setzt dazu den Dateinamen aus dem mit -I 
Incpude-Pfad und dem, was in der #inlucde-Anweisung steht, zusammen und 
versucht, eine Datei mit diesem Namen dann zu öffnen und einzubinden. 
Das macht er für alle angegebenen Include-Pfade, bis er die Datei 
findet. Wenn er sie nicht findet, bricht er mit der von dir genannten 
Fehlermeldung ab.

-l gibt einen Bibliothekspfad an und hat mit Headern überhaupt nichts zu 
tun. Es wird nicht mal beim Compilieren, sondern nur beim Linken 
ausgewertet.

Mit -include hast du dem Compiler die Datei explizit genannt. Er bindet 
die dann ein. Die #include-Anweisung im Quellcode bindet den Header dann 
ein zweites Mal ein, aber da du dem Compiler den Inlucde-Pfad nicht 
genannt hast, findet er die Datei nicht.

Eclipse-Neuling schrieb:
> Ich habe jetzt (da anscheinend -include funktioniert hat) die
> Einstellung wie auf dem Screenshot im Anhang gemacht.
>
> Die Datei ode.h wurde dann wohl gefunden, es kamen nämlich ersteinmal
> Fehlermeldungen auf ode.h bezogen. (Dort und in Hilsdateien wurden mit
> #include <ode/*.h> Dateien eingebunden, die sich eigentlich im selben
> Ordner befinden - Ich habe das jeweils in #include "*.h" geändert.)

Da sollte man nichts dran ändern. Stattdessen musst du das Verzeichnis, 
in dem das Unterverzeichnis ode mit den Headern liegt, als Include-Pfad 
angeben.

> Jetzt ( also nach dem Korrigieren von #include <ode/*.h> zu #include
> "*.h" in der Datei ode.h und deren Hilfsdateien) kommt leider wieder ein
> Fehler, nämlich
> fatal error: ode.h: Datei oder Verzeichnis nicht gefunden

In deinem Screenshot ist nichts zu sehen, das dem Compiler sagen würde, 
wo er diese Datei finden soll.

: Bearbeitet durch User
von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

zitter_ned_aso schrieb:
> Also korrigieren
> g++ -o my_demo demo_buggy.o -lode -ldrawstuff -L ~/ode-0.13.1/ode/src/.libs -L 
~/ode-0.13.1/drawstuff/src/.libs -lGL -lGLU -lX11- lpthread

Da ist jetzt ein Leerzeichen, aber an falscher Stelle.

Besser dürfte das hier sein:
1
g++ -o my_demo demo_buggy.o -lode -ldrawstuff -L ~/ode-0.13.1/ode/src/.libs -L ~/ode-0.13.1/drawstuff/src/.libs -lGL -lGLU -lX11 -lpthread

von Eclipse-Neuling (Gast)


Lesenswert?

Rolf M. schrieb:
> -include gibt man dem Compiler nur dann ann, wenn man den Header
> nicht per #include-Anweisung im Quellcode einbinden will, sondern
> stattdessen über die Compiler-Kommandozeile. Das braucht man in der
> Praxis eher selten.
>
> -I benutzt man, um dem Compiler zu sagen, wo er die Header findet, wenn
> du ein #include machst. Er setzt dazu den Dateinamen aus dem mit -I
> Incpude-Pfad und dem, was in der #inlucde-Anweisung steht, zusammen und
> versucht, eine Datei mit diesem Namen dann zu öffnen und einzubinden.
> Das macht er für alle angegebenen Include-Pfade, bis er die Datei
> findet. Wenn er sie nicht findet, bricht er mit der von dir genannten
> Fehlermeldung ab.
>
> -l gibt einen Bibliothekspfad an und hat mit Headern überhaupt nichts zu
> tun. Es wird nicht mal beim Compilieren, sondern nur beim Linken
> ausgewertet.

Ah, vielen Dank. Jetzt verstehe ich einigermaßen, was in diese Felder 
reingehört.

Dann verstehe ich aber nicht, wieso es nicht funktioniert, wenn ich es 
so umsetze:
Ich trage bei -I den Pfad ein, also /home/user/ode-0.16/include. Im 
cpp-Programm steht
1
#include </ode/ode.h>

Zusammen ergibt das /home/user/ode-0.16/include/ode/ode.h. Dann ist mir 
nicht klar, weshalb ich beim include-Befehl immer noch die Meldung 
"Datei oder Verzeichnis nicht gefunden" habe.
Habe ich etwas falsch verstanden?




Carl D. schrieb:
> Auf deinem Screenshot ist oben eine Combobox, die "Debug" Konfiguration
> anzeigt. Include-Pfade sollte man aber nicht für Debug/Release
> unterschiedlich einstellen. Bitte "All configurations" auswählen

Das habe ich übrigens jetzt auch umgesetzt.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Eclipse-Neuling schrieb:
> Im cpp-Programm steht
> #include </ode/ode.h>

Hoffentlich nicht, sondern

#include <ode/ode.h>

von Eclipse-Neuling (Gast)


Lesenswert?

zitter_ned_aso schrieb:
> Ich bin nach dieser Anleitung
>
> http://www.espore.co.uk/archives/330
>
> vorgegangen und konnte ein Beispiel problemlos kompilieren.

Danke für den Link. Bis zum 4. Schritt funktioniert alles einwandfrei. 
Beim 5. Schritt habe ich auf das Leerzeichen geachtet. Ich bekomme nach 
Eingabe des Befehls

g++ -o my_demo demo_buggy.o -lode -ldrawstuff -L 
~/ode-0.16/ode/src/.libs -L ~/ode-0.16/drawstuff/src/.libs -lGL -lGLU 
-lX11 -lpthread

folgende Fehler:

/usr/bin/ld: -ldrawstuff kann nicht gefunden werden
/usr/bin/ld: -lGL kann nicht gefunden werden
/usr/bin/ld: -lGLU kann nicht gefunden werden
/usr/bin/ld: -lX11 kann nicht gefunden werden
collect2: error: ld returned 1 exit status

Hat jemand eine Idee, woran es liegt und was man da machen kann?

von Eclipse-Neuling (Gast)


Lesenswert?

Rufus Τ. F. schrieb:
> Hoffentlich nicht, sondern
>
> #include <ode/ode.h>

Huch! Ich habe es korrigiert, jetzt wird dort tatsächlich kein Fehler 
mehr angezeigt.
Wenn ich einen Build versuche, kommt folgendes:


11:00:56 **** Incremental Build of configuration Release for project 
ODETest2 ****
make all
Building target: ODETest2
Invoking: Cross G++ Linker
g++  -o "ODETest2"  ./src/ODETest2.o
./src/ODETest2.o: In Funktion »simLoop(int)«:
ODETest2.cpp:(.text+0x31): Warnung: undefinierter Verweis auf 
»dWorldStep«
makefile:45: recipe for target 'ODETest2' failed
ODETest2.cpp:(.text+0x46): Warnung: undefinierter Verweis auf 
»dsSetColor«
ODETest2.cpp:(.text+0x52): Warnung: undefinierter Verweis auf 
»dBodyGetPosition«
ODETest2.cpp:(.text+0x61): Warnung: undefinierter Verweis auf 
»dBodyGetRotation«
./src/ODETest2.o: In Funktion »start()«:
ODETest2.cpp:(.text+0xf): Warnung: undefinierter Verweis auf 
»dsSetViewpoint«
./src/ODETest2.o: In Funktion »simLoop(int)«:
ODETest2.cpp:(.text+0x75): Warnung: undefinierter Verweis auf 
»dsDrawSphereD«
./src/ODETest2.o: In Funktion »main«:
ODETest2.cpp:(.text.startup+0x2c): Warnung: undefinierter Verweis auf 
»dMassSetZero«
ODETest2.cpp:(.text.startup+0x6e): Warnung: undefinierter Verweis auf 
»dInitODE«
ODETest2.cpp:(.text.startup+0x73): Warnung: undefinierter Verweis auf 
»dWorldCreate«
ODETest2.cpp:(.text.startup+0x92): Warnung: undefinierter Verweis auf 
»dWorldSetGravity«
ODETest2.cpp:(.text.startup+0x9e): Warnung: undefinierter Verweis auf 
»dBodyCreate«
ODETest2.cpp:(.text.startup+0xad): Warnung: undefinierter Verweis auf 
»dMassSetZero«
ODETest2.cpp:(.text.startup+0xc5): Warnung: undefinierter Verweis auf 
»dMassSetSphereTotal«
ODETest2.cpp:(.text.startup+0xd4): Warnung: undefinierter Verweis auf 
»dBodySetMass«
ODETest2.cpp:(.text.startup+0xf0): Warnung: undefinierter Verweis auf 
»dBodySetPosition«
ODETest2.cpp:(.text.startup+0x107): Warnung: undefinierter Verweis auf 
»dsSimulationLoop«
ODETest2.cpp:(.text.startup+0x113): Warnung: undefinierter Verweis auf 
»dWorldDestroy«
ODETest2.cpp:(.text.startup+0x118): Warnung: undefinierter Verweis auf 
»dCloseODE«
collect2: error: ld returned 1 exit status
make: *** [ODETest2] Error 1

11:00:56 Build Failed. 8 errors, 0 warnings. (took 407ms)



Was hat nun nicht geklappt?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Dein Compiler ist glücklich, der Linker aber nicht.

Die "undefinierter-Verweis"-Ausgaben werden vom Linker erzeugt, dem 
offensichtlich die Libraries (*.a) bzw. Objektdateien (*.o) fehlen, in 
denen die betreffenden Symbole/Funktionen enthalten sind.

von zitter_ned_aso (Gast)


Lesenswert?

Eclipse-Neuling schrieb:
> Ich bekomme nach
> Eingabe des Befehls

In der Linuxkonsole? Oder unter Eclipse?


Also ich bin nach dem Tutorial (siehe Link oben) vorgegangen und konnte 
das Beispielprogramm kompilieren. Auch unter Eclipse.

hier ist die Konsolenausgabe (unter Eclipse):
1
make all 
2
Building file: ../ode_test.cpp
3
Invoking: GCC C++ Compiler
4
g++ -I/home/pc/Downloads/delete/ode-0.16/include -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"ode_test.d" -MT"ode_test.o" -o "ode_test.o" "../ode_test.cpp"
5
Finished building: ../ode_test.cpp
6
 
7
Building target: ode_test
8
Invoking: GCC C++ Linker
9
g++   ./ode_test.o    -L/home/pc/Downloads/delete/ode-0.16/ode/src/.libs -L/home/intpc/Downloads/delete/ode-0.16/drawstuff/src/.libs -lode -ldrawstuff -lGL -lGLU -lX11 -lpthread -o "ode_test"
10
Finished building target: ode_test

Wie man sieht wird zuerst ein Objektfile erzeugt. Danach kommt der 
Linker zum Einsatz (und der braucht viele zusätzliche Libraries).


Wie gesagt, ich habe zuerst ohne Eclipse, in der Console, kompiliert. 
Wie im Tutorial. Dann hatte ich ein Projekt, das funktionierte, und so 
habe ich es nach Eclipse kopiert.


Wie habe ich Eclipse konfiguriert?

0) ein c++-Projekt anlegen

1) eine cpp-Datei mit dem Quellcode des Beispielprogramm (siehe 
Tutorial) erzeugen. (einfach Quellcode aus dem Beispielprogramm 
reinkopieren, nichts ändern. Also kein </ode/blabla.h>)

2) ein Verzeichnis "textures" erzeugen und dorthin alle Texturen 
kopieren (die vom Programm benötigt werden). Kopiert habe ich die 
Texturen per Hand,  in einem "Filemanager". So habe ich Quellcode und 
Texturen im gleichen Verzeichnis / Projekt.

3) eine header-Datei texturepath.h erzeugen (wieder den Inhalt 
reinkopieren). Und das Verzeichnis für die Texturen anpassen (wie im 
Tutorial erwähnt).

#define DRAWSTUFF_TEXTURE_PATH "textures"

4) project->properties->c/c++ build->settings


GCC C++ Compiler:

Hier bei "includes"

/hier/liegt/es/ode-0.16/include

hinzufügen. Ohne -I.

--------------------

GCC C++ Linker:


Hier bei "Libraries"

/hier/liegt/es/ode-0.16/ode/src/.
/hier/lieg/es/ode-0.16/drawstuff/src/.libs

hinzufügen


Bei "Miscellaneous" unter "linker flags" einfach

-lode -ldrawstuff -lGL -lGLU -lX11 -lpthread

eintragen (wie im Tutorial).


Und wenn du direkt auf "GCC C++ Linker" klickst, dann hast du rechts ein 
Feld "Expert settings: Command line pattern"

Dort musste ich die Reihenfolge ändern. Mit dieser REihenfolge klappts 
bei mir:

 ${COMMAND}  ${INPUTS} ${FLAGS} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT}


Und ich denke du hast alles richtig gemacht und der Fehler liegt im 
letzten Absatz. Die Patternreihenfolge muss wohl geändert werden.


Aber wie gesagt: Ich habe zuerst die Konsole benutzt. Dann wusste ich 
dass alles funktioniert und dann kann man auch mit Eclipse spielen.

von zitter_ned_aso (Gast)


Lesenswert?

Rufus Τ. F. schrieb:
> Da ist jetzt ein Leerzeichen, aber an falscher Stelle.
>
> Besser dürfte das hier sein:
> g++ -o my_demo demo_buggy.o -lode -ldrawstuff -L
> ~/ode-0.13.1/ode/src/.libs -L ~/ode-0.13.1/drawstuff/src/.libs -lGL
> -lGLU -lX11 -lpthread

Ja, Danke!

von zitter_ned_aso (Gast)


Lesenswert?

zitter_ned_aso schrieb:
> GCC C++ Linker:
>
> Hier bei "Libraries"
>
> /hier/liegt/es/ode-0.16/ode/src/.
> /hier/lieg/es/ode-0.16/drawstuff/src/.libs
>
> hinzufügen

Also im unteren Textfeld (Library search path (-L))

von zitter_ned_aso (Gast)


Lesenswert?

Eclipse-Neuling schrieb:
> /usr/bin/ld: -lGL kann nicht gefunden werden
> /usr/bin/ld: -lGLU kann nicht gefunden werden

Ach so. Er benutzt OpenGL für die grafische Ausgabe.

Wahrscheinlich hast du keine passenden Libs auf dem Rechner. Einfach 
nachinstallieren

(wird so ähnlich sein wie hier:

http://www.codebind.com/linux-tutorials/install-opengl-ubuntu-linux/)

von Eclipse-Neuling (Gast)


Lesenswert?

zitter_ned_aso schrieb:
> In der Linuxkonsole? Oder unter Eclipse?

In der Linux-Konsole.

zitter_ned_aso schrieb:
> Wie habe ich Eclipse konfiguriert?

Das habe ich jetzt so gemacht, und es wurden wieder die Linker nicht 
gefunden.

zitter_ned_aso schrieb:
> Wahrscheinlich hast du keine passenden Libs auf dem Rechner. Einfach
> nachinstallieren
>
> (wird so ähnlich sein wie hier:
>
> http://www.codebind.com/linux-tutorials/install-opengl-ubuntu-linux/)

Nach Befolgen dieser Anleitung wird nur noch -ldrawstuff nicht gefunden 
(sowohl im Terminal, als auch in Eclipse). Muss ich das auch 
nachinstallieren...?

von zitter_ned_aso (Gast)


Lesenswert?

Eclipse-Neuling schrieb:
> nur noch -ldrawstuff nicht gefunden

DrawStuff nachinstallieren? Ähm, hast du es nicht? Ich habe das 
ODE-Packet von

https://bitbucket.org/odedevs/ode/downloads/

runtergeladen und entpackt. Da war dann alles dabei. DrawStuff ist ja 
die GUI (für die Beispiele).

Danach ./configure und make

(wie hier beschrieben:
http://www.espore.co.uk/archives/330)


Hast du diese Engine mit "apt-get install ..." (oder so) installiert?

Du übergibt doch ein "drawstuff"-Verzeichnis an den Linker mit allen 
Libs. (/hier/lieg/es/ode-0.16/drawstuff/src/.libs) Hast du es nicht?

von Eclipse-Neuling (Gast)


Lesenswert?

zitter_ned_aso schrieb:
> Ich habe das
> ODE-Packet von
>
> https://bitbucket.org/odedevs/ode/downloads/
>
> runtergeladen und entpackt.

Dort habe ich es auch her.

Installiert habe ich es wie auf folgender Seite beschrieben:

http://wiki.icub.org/wiki/Linux:_Installing_ODE


zitter_ned_aso schrieb:
> Du übergibt doch ein "drawstuff"-Verzeichnis an den Linker mit allen
> Libs. (/hier/lieg/es/ode-0.16/drawstuff/src/.libs) Hast du es nicht?

.libs existiert, ist aber leer. Wie sieht es bei dir aus?

von zitter_ned_aso (Gast)


Lesenswert?

Eclipse-Neuling schrieb:
> .libs existiert, ist aber leer. Wie sieht es bei dir aus?

Bei mir ist das Verzeichnis nicht leer und enthält zwei Dateien 
(libdrawstuff.a  libdrawstuff.la).

Eclipse-Neuling schrieb:
> Installiert habe ich es wie auf folgender Seite beschrieben:
>
> http://wiki.icub.org/wiki/Linux:_Installing_ODE

und da steht:

More optional parameters:

 --disable-drawstuff  --disable-demos

hast du diese Parameter benutzt? Anscheinend wurden bei dir die Libs für 
die GUI nicht erzeugt.

von Eclipse-Neuling (Gast)


Lesenswert?

zitter_ned_aso schrieb:
> More optional parameters:
>
>  --disable-drawstuff  --disable-demos
>
> hast du diese Parameter benutzt?

Nein, ich habe den Befehl

./configure --prefix=/home/user/ode-0.13.1/build 
--exec-prefix=/home/user/ode-0.13.1/build --enable-libccd 
--enable-double-precision --enable-shared

verwendet. Ich habe jetzt noch mal ./configure, make und make install 
ausgeführt wie in

zitter_ned_aso schrieb:
> Danach ./configure und make
>
> (wie hier beschrieben:
> http://www.espore.co.uk/archives/330)

Die .lib-Datei ist immer noch leer...

von zitter_ned_aso (Gast)


Lesenswert?

OpenGL ist installiert?  Du brauchst diese Lib für die GUI.

Lege einfach ein neues Verzeichnis an. Entpacke dort das ODE-Packet und 
kompiliere  es mit configure + make (siehe Tutorial). Dann übergebe 
dieses Verzeichnis an den Linker. Bei mir funktioniert's.

Eclipse-Neuling schrieb:
> Die .lib-Datei ist immer noch leer...

Das ist ein (verstecktes) Verzeichnis unter Linux. Keine Datei.

Eclipse-Neuling schrieb:
> und make install
> ausgeführt

make install wurde dort gar nicht ausgeführt. (habe ich auch nicht 
gemacht)

von Eclipse-Neuling (Gast)


Lesenswert?

zitter_ned_aso schrieb:
> Dann übergebe
> dieses Verzeichnis an den Linker.

Wie geht das?

von zitter_ned_aso (Gast)


Lesenswert?

Rufus Τ. F. schrieb:
> Besser dürfte das hier sein:
> g++ -o my_demo demo_buggy.o -lode -ldrawstuff -L
> ~/ode-0.13.1/ode/src/.libs -L ~/ode-0.13.1/drawstuff/src/.libs -lGL
> -lGLU -lX11 -lpthread


Wie im Tutorial. Nur halt die Verzeichnisse anpassen. Bei dir heißen die 
ja anders.


Momentan hast du ja keine Lib fürs GUI. Und die bekommst du nur wenn du 
das ODE-Packet sauber kompilierst.

Im Prinzip braucht dieses "drawstuff" gar nicht. Das ist ja nur für die 
Beispiele da.

Du willst ja die Engine in deinen Projekten benutzen. Andererseits sieht 
es mit der Doku für diese Engine ziemlich mager aus. Als Tutorials 
werden die mitgelieferten Beispiel angeboten. Also ist es gut wenn 
"drawstuff" doch benutzt werden kann.

von zitter_ned_aso (Gast)


Lesenswert?

http://ode.org/wiki/index.php?title=Manual#Install_and_Use

In der Dokumantation steht ja

Before You Build

Before you start, you should know that there are two parts to ODE. There 
is "ODE", which is the physics and collision detection library. Then 
there is "DrawStuff", a simple wrapper over Win32/X11 and OpenGL which 
is used for the demo applications.

---
Also wird DrawStuff nur für die Beispiele benötigt und dann noch die 
Libs für OpenGL und X11 (für die Grafik + GUI).

Im Prinzip bekommst du ja nach dem Aufruf von .configure eine 
Rückmeldung. Dort müsste eigentlich stehen dass die Library XYZ fehlt.

Vielleicht fehlt noch die X11-Lib (libx11-dev oder so).

von Eclipse-Neuling (Gast)


Lesenswert?

zitter_ned_aso schrieb:
>> g++ -o my_demo demo_buggy.o -lode -ldrawstuff -L
>> ~/ode-0.13.1/ode/src/.libs -L ~/ode-0.13.1/drawstuff/src/.libs -lGL
>> -lGLU -lX11 -lpthread
>
> Wie im Tutorial. Nur halt die Verzeichnisse anpassen. Bei dir heißen die
> ja anders.

Wenn ich das eingebe, kommt wieder der Fehler "-ldrawstuff kann nicht 
gefunden werden"

zitter_ned_aso schrieb:
> Momentan hast du ja keine Lib fürs GUI. Und die bekommst du nur wenn du
> das ODE-Packet sauber kompilierst.

Ist das Kompilieren das mit ./configure und make?

von zitter_ned_aso (Gast)


Lesenswert?

Eclipse-Neuling schrieb:
> Ist das Kompilieren das mit ./configure und make?

Ja.

ich die Datei entpackt. Dann im Verzeichnis den Befehl .configure 
eingegeben.

Dieses Tool prüft ob dein Systen alle benotigten Bibliotheken hat.

Das sind bei mir die letzten Ausgabezeilen in der Konsole von 
.configure:
1
Configuration:
2
  Build  system type:      x86_64-pc-linux-gnu
3
  Host   system type:      x86_64-pc-linux-gnu
4
  Use double precision:    no
5
 
6
  Use drawstuff:           X11
7
8
  Demos enabled:           yes
9
  Use OPCODE:              yes
10
  Use GIMPACT:             no
11
  Use libccd:              no
12
  Custom colliders:
13
        cylinder-cylinder: none
14
        box-cylinder:      default
15
        capsule-cylinder:  none
16
usw.



Also bei mir läuft's. Die Beispiele benötigen zusätzliche Bibliotheken. 
Das habe ich oben schon erwähnt. Wenn du die hast, dann müsste es 
eigentlich funktionieren. Ich mache ja auch nichts anderes.

von Eclipse-Neuling (Gast)


Lesenswert?

zitter_ned_aso schrieb:
> Use drawstuff:           X11

Ah, bei mir steht dort none anstatt X11 (nach Ausführen von 
./configure). Bei ./configure --with-drawstuff=X11 kommt das gleiche 
raus. Kann man noch irgendwie anders einstellen, dass drawstuff mit 
installiert wird?

von zitter_ned_aso (Gast)


Lesenswert?

zitter_ned_aso schrieb:
> Vielleicht fehlt noch die X11-Lib (libx11-dev oder so)

Ich habe dir doch schon geschrieben, dass die X11-Lib benötigt wird.

Unter Ubuntu könntest du

sudo apt-get install libx11-dev

ausprobieren

(oder googeln)

Und dann noch mal ./configure  und schauen ob

---
  Use drawstuff:           X11
---

erscheint.

von zitter_ned_aso (Gast)


Lesenswert?

Eclipse-Neuling schrieb:
> Kann man noch irgendwie anders einstellen, dass drawstuff mit
> installiert wird?

zitter_ned_aso schrieb:
> http://ode.org/wiki/index.php?title=Manual#Install_and_Use
>
> In der Dokumantation steht ja
>
> Before You Build
>
> Before you start, you should know that there are two parts to ODE. There
> is "ODE", which is the physics and collision detection library. Then
> there is "DrawStuff", a simple wrapper over Win32/X11 and OpenGL which
> is used for the demo applications.


ODE-Engine nutzt OpenGL- und X11-Bibliotheken (für die Grafikausgabe bei 
Beispielprogrammen). Du musst sie auf deinem System haben. Sie haben 
nichts mit ODE zu tun und werden von ODE nicht mitgeliefert. Du hast 
auch schon "DrawStuff" auf dem Rechner. Es funktioniert nicht weil dir 
die Libs für die GUI fehlen.

Die Fehlermeldungen

zitter_ned_aso schrieb:
>> /usr/bin/ld: -lGL kann nicht gefunden werden
>> /usr/bin/ld: -lGLU kann nicht gefunden werden


sind ja weg. Anscheinend hast du OpenGL-Libs installiert. Jetzt mach das 
gleiche mit X11-Libs.

von Eclipse-Neuling (Gast)


Lesenswert?

zitter_ned_aso schrieb:
> sudo apt-get install libx11-dev

Im Terminal stand daraufhin

libx11-dev ist schon die neueste Version (2:1.6.4-3ubuntu0.1).
libx11-dev wurde als manuell installiert festgelegt.

Ich habe gegoogelt und diesen Befehl gefunden und ausprobiert:

sudo apt-get install xorg openbox

Es kam keine Fehlermeldung, also müsste X11 doch eigentlich installiert 
sein.

Bei ./configure steht bei Drawstuff aber immer noch none

von zitter_ned_aso (Gast)


Lesenswert?

das ist (bei mir) ein Teil der Ausgabe von ./configure:

...
...
...
checking which drawstuff lib to build... X11

checking for X11... yes

checking for GL/gl.h... yes
checking for GL/glu.h... yes
checking for GL/glext.h... yes
checking for main in -lGL... yes
...
...
...

Wie du siehst, wird es nach X11 gesucht. Und (bei mir) auch gefunden. 
Wird denn bei dir X11 von ./configure-Skript gefunden?

von zitter_ned_aso (Gast)


Lesenswert?

Und noch was:

./configure --help

gibt alle möglichen Parametern aus.

Versuche explizit mit beiden Parametern

--with-drawstuff=X11 --enable-demos

zu arbeiten.


Also

./configure --with-drawstuff=X11 --enable-demos

von Eclipse-Neuling (Gast)


Lesenswert?

zitter_ned_aso schrieb:
> ./configure --with-drawstuff=X11 --enable-demos

Das habe ich eingegeben.

zitter_ned_aso schrieb:
> checking which drawstuff lib to build... X11
>
> checking for X11... yes

Bei mir steht:

...
checking which drawstuff lib to build... X11
checking for X11... no
checking if demos should be built... no
configure: WARNING: Demos will not be built because OpenGL doesn't seem 
to work
...

zitter_ned_aso schrieb:
> checking for GL/gl.h... yes
> checking for GL/glu.h... yes
> checking for GL/glext.h... yes
> checking for main in -lGL... yes

Diese Zeilen habe ich nicht gefunden

von zitter_ned_aso (Gast)


Lesenswert?

Eclipse-Neuling schrieb:
> configure: WARNING: Demos will not be built because OpenGL doesn't seem
> to work


hast du denn OpenGL auf deinem Rechner?


sudo apt-get install freeglut3 freeglut3-dbg freeglut3-dev

http://cell0907.blogspot.com/2014/11/ode-installation-in-linux-mint_15.html

(und auch unter diesem Link wird nur ./configure, make, make install 
eingegeben)

von zitter_ned_aso (Gast)


Lesenswert?

http://www.codebind.com/linux-tutorials/install-opengl-ubuntu-linux/

sudo apt-get install libglu1-mesa-dev freeglut3-dev mesa-common-dev

von Eclipse-Neuling (Gast)


Lesenswert?

Ich habe die Befehle mal eben ausprobiert.

zitter_ned_aso schrieb:
> sudo apt-get install freeglut3 freeglut3-dbg freeglut3-dev

E: Paket freeglut3-dbg kann nicht gefunden werden

zitter_ned_aso schrieb:
> sudo apt-get install libglu1-mesa-dev freeglut3-dev mesa-common-dev

libglu1-mesa-dev ist schon die neueste Version
freeglut3-dev ist schon die neueste Version
mesa-common-dev ist schon die neueste Version

Hast du noch eine Idee dazu?

von zitter_ned_aso (Gast)


Lesenswert?

Eclipse-Neuling schrieb:
> checking for X11... no

Ich würde sagen das ist dein Problem. Aber was da noch fehlt, das kann 
ich nicht sagen.

von Eclipse-Neuling (Gast)


Lesenswert?

zitter_ned_aso schrieb:
> Ich würde sagen das ist dein Problem.

Alles klar.

Dann vielen Dank für die viele Hilfe! Das hat mir sehr weitergeholfen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.