Seite 2 von 3

Re: shared Libraries einbinden

Verfasst: Mo Mai 07, 2018 3:07 pm
von Xin
MoMo hat geschrieben:Ja deine Tipps sind bis jetz auch immer sehr gut.

ich die ganzen Fehler mal analysiert und es liegt teils daran das ich c++11 brauche, habe dann -std=c++11 in den Compileraufruf gemacht und erhalte nun folgendes:
/usr/bin/ld: cannot find -lfranka
collect2: error: ld returned 1 exit status
Sehr gut, der Compiler ist zufrieden.
Nun streikt der Linker.
MoMo hat geschrieben: Mein Aufruf sieht ja wie folgt aus:

gcc -std=c++11 myproject.cpp -I /home/system/libfranka/include/ -I /usr/include/eigen3 -L /home/system/libfranka/build/libfranka.so -lfranka -o test
-L gibt das/ein Verzeichnis an, in dem die Libs liegen. -lfranka sucht also in dem Verzeichnis nach einer libfranka.so. Du gibst eine Datei an und darin kann er die libfranka.so nicht finden.

-L /home/system/libfranka/build
reicht.

Re: shared Libraries einbinden

Verfasst: Di Mai 08, 2018 9:33 am
von MoMo
Hey,

ok vom Regen in die Traufe... es hört nicht auf.

Nach deiner Berichtigung war der Fehler weg, aber jetzt kommt ein neuer:

/usr/bin/ld: /tmp/ccamyvZz.o: undefined reference to symbol '_ZTVN10__cxxabiv117__class_type_infoE@@CXXABI_1.3'
//usr/lib/x86_64-linux-gnu/libstdc++.so.6: error adding symbols: DSO aus der Kommandozeile fehlt
collect2: error: ld returned 1 exit status

Ich versteh die Fehlermeldung nicht ganz, aber ich hab eine Vermutung: Es wird eine Lib nicht gefunden, die libstdc++.so.6 heißt ?

Re: shared Libraries einbinden

Verfasst: Di Mai 08, 2018 10:08 am
von Xin
Du hast ein C++-Programm?
Kompiliere mit g++ statt mit gcc.

Re: shared Libraries einbinden

Verfasst: Mi Mai 23, 2018 12:28 pm
von MoMo
Sorry für die späte Rückmeldung und vielen lieben Dank für deine Mühen!

Ich sitze wieder an dem Projekt und kompiliere jetzt mit g++

Das ist mir schon unangenehm weiter zu fragen aber:

Jetzt kommen folgende Meldungen:
myproject.cpp:(.text+0x41): Nicht definierter Verweis auf `franka::Duration::toSec() const'
...
...
...
alles was ich mit franka:: beginne ( Wenn ich mich nicht irre ist das der Namespace)

Meine Frage ist, wenn ich doch die Lib erfolgreich eingebunden habe mit:

Code: Alles auswählen

 g++ -std=c++11 myproject.cpp -I /home/system/libfranka/include/ -I /usr/include/eigen3/ -L /home/system/libfranka/build/libfranka.so -Ifranka -o test
 
wieso kommt den folgende Fehlermeldung, es sollte doch nun alles richtig sein.
Weil ich habe bis jetzt einfach ein Example aus der Lib umgeschrieben und die Lib immer neu gebaut und somit konnte ich meinen Code immer in dem Example ausrühren, funktioniert. Dann halt copy-paste in meine eigene .cpp . Mit dem oben genannten Konsolenbefehl sollte das doch genau wie der Code aus dem Example richtig kompilieren und keine Fehler schmeißen - bzw. die Verweise finden. Vielleicht übersehe ich auch was simples und komme einfach nicht drauf.

Re: shared Libraries einbinden

Verfasst: Mi Mai 23, 2018 1:16 pm
von Xin

Code: Alles auswählen

g++ -std=c++11 myproject.cpp -I /home/system/libfranka/include/ -I /usr/include/eigen3/ -L /home/system/libfranka/build/libfranka.so -Ifranka -o test
ist eigentlich falsch, da sollte nur -L /home/system/libfranka/build stehen, denn in dem Verzeichnis liegt die libfranka.so, die mit -lfranka eingebunden wird. Richtig?

So findet er die libfranka.so vermutlich nicht, weswegen die entsprechenden Funktionen fehlen.
Schau doch mal, ob da am Anfang was von "libfranka.so nicht gefunden" steht.

Re: shared Libraries einbinden

Verfasst: Mi Mai 23, 2018 1:40 pm
von MoMo
Auch wenn ich die .so nicht im -L Pfad angebe, wie du sagst, kommt die Meldung. Dort steh tauch nicht, das die Lib nicht gefunden wurde - ebenfalls hast du recht im Build Verzeichnis liegt die .so bzw liegen dort 3 Stück ".so ; .so.0.3 und .so.0.3.0"
/tmp/ccWGjNH5.o: In Funktion `main::{lambda(franka::RobotState const&, franka::Duration)#1}::operator()(franka::RobotState const&, franka::Duration) const':
myproject.cpp:(.text+0x41): Nicht definierter Verweis auf `franka::Duration::toSec() const'
...
myproject.cpp:(.text+0x11c8): Nicht definierter Verweis auf `franka::Robot::setCollisionBehavior(std::array<double, 7ul> const&, std::array<double, 7ul> const&, std::array<double, 7ul> const&, std::array<double, 7ul> const&, std::array<double, 6ul> const&, std::array<double, 6ul> const&, std::array<double, 6ul> const&, std::array<double, 6ul> const&)'
myproject.cpp:(.text+0x11eb): Nicht definierter Verweis auf `franka::Gripper::homing() const'
...
...
collect2: error: ld returned 1 exit status

Re: shared Libraries einbinden

Verfasst: Mi Mai 23, 2018 2:01 pm
von Xin
Es liegt aber nicht daran, dass Du die Funktionen als const in der Header datei hast, aber in der Lib nur ohne const?

Re: shared Libraries einbinden

Verfasst: Mi Mai 23, 2018 2:38 pm
von MoMo
du meinst mit in der Lib - in der .so Datei?
Dort habe ich nicht reingeschaut - ich denke aber auch nicht das da der Fehler liegt, ich hab ja die Lib gedownloadet mit ihren Headern und da sollte es doch keine Komplikationen geben, habe ja nichts an den Dateien verändert.
Lib runtergeladen - gebaut das wars.

nach meinem Verständnis macht man genau das: downloaden - bauen - in seinen Code inkludieren - beim compilen verlinken - ohne noch Änderungen an der Lib selbst vorzunehmen.

Ich versuche mal eine andere externe Lib einzubinden.

Re: shared Libraries einbinden

Verfasst: Mi Mai 23, 2018 3:09 pm
von Xin
MoMo hat geschrieben:nach meinem Verständnis macht man genau das: downloaden - bauen - in seinen Code inkludieren - beim compilen verlinken - ohne noch Änderungen an der Lib selbst vorzunehmen.
Okay, wenn das nicht Deine Lib ist, dann sollte das eigentlich passen.

Ich kann so aber auch nur raten, da ich weder Deinen Verzeichnisbaum sehen kann, noch den Quelltext und so nichts ausprobieren kann. Ich rate also auch nur.

Re: shared Libraries einbinden

Verfasst: Mi Mai 23, 2018 4:04 pm
von MoMo
hier der Beispielcode (nicht von mir geschrieben, aber der geht und sollte ja auch ausgelagert funktionerien) man muss nur noch eine weitere Header einbinden wie du bei dem Aufruf siehst.
g++ -std=c++11 thesis.cpp -I /home/system/libfranka/include/ -I /home/system/libfranka/examples/ -I /usr/include/eigen3/ -L /home/system/libfranka/build/ -Ifranka -o test
Hier die Struktur der Lib mittels tree
https://we.tl/g47f3eptKA
und hier der Code
https://we.tl/FN9EOC0Dp9

Hier Infos über die Lib https://frankaemika.github.io/libfranka/index.html