[Frage] Problem mit libstdc++

G-Fire

Neuer User
Mitglied seit
8 Apr 2007
Beiträge
28
Punkte für Reaktionen
0
Punkte
1
Hallo,

ich habe für meine Uralt-Fritz Box Fon ein kleines Tool geschrieben. Es ist in c++ geschrieben und kompiliert auch einwandfrei auf meiner Debian-Kiste.
Nun bin ich nicht sooo der Linux-Guru und bekomme mein kompiliertes Programm auf der Fritz Box nicht zum laufen.

Der Fehler lautet: ./tool: can't load library 'libstdc++.so.6'
Kompiliert wurde mit: mipsel-linux-uclibc-gcc -pthread -lstdc++ Main.o IrcConnection.o -o tool
ldd tool liefert: not a dynamic executable (widerspricht dies nicht dem obigen Fehler?)

Die entsprechende Lib aus dem toolchain mit dem Switch -static libstdc++.so.6 einzubinden, scheiterte ebenfalls. Mein letzter Versuch die Datei manuell auf die Fritz Box zu kopieren scheiterte natürlich auch, da das /lib/ nunmal Read-Only ist.

Ein neues Image für die Fritz Box würde ich gerne vermeiden.


Vielen Dank schon jetzt.

Grüße,
G-Fire
 
Wenn Du schon ein Programm in C++ schreibst, wirst Du auch die C++ Library in der einen oder anderen Form auf die Box bringen müssen. Ob die Box das überhaupt verträgt, musst Du ausprobieren.

Was genau spricht dagegen, ein neues Image zu erstellen?
 
Du kannst die Library auch woanders auf der Box abspeichern, z.B. nach /mod/lib (Stichwort LD_LIBRARY_PATH, das ist bei mir schon im Standard auf /mod/lib gesetzt).
Ansonsten: Woran scheitert denn das statische Bauen genau? Hast du die statische Version von libstdc++ ? Wäre es eventuell möglich/sinnvoll, gegen die kleinere uClibc++ zu linken?

Jörg
 
Und warum verwendest Du mipsel-linux-uclibc-gcc (ein C-Compiler), wenn Dein Programm in C++ geschrieben ist?

In freetz wird die (kleinere) uClibc++ und nicht die libstdc++ als Standard C++ Library verwendet. Versuche mal mit mipsel-linux-uclibc-g++-uc zu compileren, lasse dabei den Parameter -lstdc++ komplett weg. Die uClibc++ muss trotzdem auf der Box sein. Wenn Dein aktuelles Image noch keine uClibc++ enthält und Du kein neues Image erstellen möchtest, so kannst Du die Library manuell auf die Box kopieren und sie unter /mod/lib abspeichern. Vergiss nicht die Symlinks (libuClibc++.so.0 und libuClibc++.so) anzulegen.

Das alles gilt, wenn Dein Programm wirklich in C++ geschrieben ist. Wenn es in Wirklichkeit in C ist, so lasse einfach -lstdc++ weg. Sofern Dein Programm kein Multi-Threading-Programm ist, kann auch -pthread weggelassen werden.
 
Vielen Dank für die zahlreichen Antworten!

Ich habe das Programm nun zum laufen gebracht.
Um die Frage zu beantworten aus welchem Grund ich kein neues Image bauen möchte, kann ich leider nur meine mangelden Linuxkentnisse vorschieben. Auf der Box wurden mit der Zeit viele undokumentierte Änderungen gemacht (die Fritz Box von mir nur als "Mini-Server" benutzt).
Der Tipp mit dem "/mod/lib" bzw. dem "LD_LIBRARY_PATH" war dann wohl die Lösung.
"echo $LD_LIBRARY_PATH" liefert bei mir (natürlich) auch "/mod/lib". Dort habe ich nun die Library aus dem Toolchain hinkopiert.

Dass ich mit "mipsel-linux-uclibc-gcc" kompilieren wollte war ein Schreibfehler der mir leider auch erst jetzt aufgefallen ist. "mipsel-linux-uclibc-g++-uc" ist bei mir zwar nicht verfügbar, mit "mipsel-linux-uclibc-g++" (ohne uc) funktioniert es aber top!

Ich danke Euch nochmal vielmals für Eure Antworten. Dies hat mir sicher nicht nur für dieses Problem geholfen, sondern auch mit g++ (habe bisher nur Erfahrung mit Visual Studio) und Linux allgemein.


Grüße,
G-Fire
 
Der Pfad der Libraries ist bei mir auch

LD_LIBRARY_PATH='/mod/lib'

Wenn ich aber zusätzliche Libs mit Freetz-Trunk baue werden die nicht dorthin kopiert sonder liegen unter

/usr/lib/freetz

Ich würde es begrüßen wenn man das Verzeichnis in den Libraries Path hinzufügen könnte.
Es ist etwas lässtig immer den Path zu erweitern:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/freetz

Oder gibt es hierfür einen Grund?
 
Was genau hat deine Frage mit dem Thema zu tun?

Wir machen das damit die AVM Binaries die Freetz Libraries nicht "sehen".

Gruß
Oliver
 
Mit dem Thema hat es nur insofern was zu tun das hier das Wort LD_LIBRARY_PATH bereits verwendet wurde. Nachdem ich gesucht habe.

Ist /mod/lib nicht von freetz?
 
/mod/lib ist nicht reboot fest und dazu gedacht, dass man Libraries "zum Testen" während dem Betrieb dort hin kopieren kann.

Gruß
Oliver
 

Zurzeit aktive Besucher

Statistik des Forums

Themen
246,284
Beiträge
2,249,439
Mitglieder
373,877
Neuestes Mitglied
Bbj
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.