shared Libraries einbinden

Schnelle objektorientierte, kompilierende Programmiersprache.
Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8456
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: shared Libraries einbinden

Beitrag von Xin » Mo Mai 07, 2018 3:07 pm

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.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

MoMo
Beiträge: 26
Registriert: Mo Mai 07, 2018 9:49 am

Re: shared Libraries einbinden

Beitrag von MoMo » Di Mai 08, 2018 9:33 am

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 ?

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8456
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: shared Libraries einbinden

Beitrag von Xin » Di Mai 08, 2018 10:08 am

Du hast ein C++-Programm?
Kompiliere mit g++ statt mit gcc.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

MoMo
Beiträge: 26
Registriert: Mo Mai 07, 2018 9:49 am

Re: shared Libraries einbinden

Beitrag von MoMo » Mi Mai 23, 2018 12:28 pm

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.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8456
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: shared Libraries einbinden

Beitrag von Xin » Mi Mai 23, 2018 1:16 pm

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.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

MoMo
Beiträge: 26
Registriert: Mo Mai 07, 2018 9:49 am

Re: shared Libraries einbinden

Beitrag von MoMo » Mi Mai 23, 2018 1:40 pm

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

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8456
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: shared Libraries einbinden

Beitrag von Xin » Mi Mai 23, 2018 2:01 pm

Es liegt aber nicht daran, dass Du die Funktionen als const in der Header datei hast, aber in der Lib nur ohne const?
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

MoMo
Beiträge: 26
Registriert: Mo Mai 07, 2018 9:49 am

Re: shared Libraries einbinden

Beitrag von MoMo » Mi Mai 23, 2018 2:38 pm

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.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8456
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: shared Libraries einbinden

Beitrag von Xin » Mi Mai 23, 2018 3:09 pm

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.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

MoMo
Beiträge: 26
Registriert: Mo Mai 07, 2018 9:49 am

Re: shared Libraries einbinden

Beitrag von MoMo » Mi Mai 23, 2018 4:04 pm

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

Antworten