Linker Fehler bei Boost 1.40 / Toolchain (ulibc 0.9.31.1)

Tester1337

Neuer User
Mitglied seit
23 Sep 2011
Beiträge
26
Punkte für Reaktionen
0
Punkte
0
Hallo zusammen,

kann mir Jemand vielleicht weiterhelfen?

Ich kann mit Linux das ganze erfolgreich Linken bei MIPS dagegen läuft es schief. Die neue Boost Version funktioniert im übrigen auch nicht vollständig. Da Pakete übersprungen bzw. fehlerhaft sind.

Das Problem liegt an der Boost Lib:
Code:
mips-linux-uclibc-g++  -Wall -Wno-unused-result -O2       -I../lib/cgicc-win32-installed/include -I../lib/boost_1_40_0 -I../lib/cgicc-mips-installed/include/    -c main.cpp -o .mips/main.o
mips-linux-uclibc-g++ -o .mips/sphinx.exe .mips/main.o -L../lib/cgicc-mips-installed/lib -lcgicc
.mips/main.o: In function `_ZL8readDataRSt3mapISsS_ISsSsSt4lessISsESaISt4pairIKSsSsEEES1_SaIS2_IS3_S6_EEE.clone.262':
main.cpp:(.text+0x1574): undefined reference to `__clzsi2'
collect2: ld returned 1 exit status
make: *** [.mips/sphinx.exe] Fehler 1

Die betreffende Methode intern ist __lg welche von sort verwendet wird
 
Ich wusste gar nicht, dass wir ein Paket für Boost haben!?

Gruß
Oliver
 
Ein interessanter Gegensatz. Manchmal hilft es schon weiter, wenn man die Begriffe richtig verwendet.
Ich habe damit lediglich gemeint das ich es unter Linux für die Prozessorarchitektur der VM erfolgreich kompilieren kann aber eben nicht mit dem Toolchain für die Fritzbox.

Und da ihr aufgrund eurer MIPS Builds offentsichtlich Erfahrung habt habe ich eben nachgefragt.

Soweit ich weiß gibt es kein Boost Package bei Freetz
 
Google schaffe ich auch noch selbst :)
Ich meinte, was man sinnvolles damit machen kann.

Du brauchst beim Übersetzen noch die Option -march=4kc
 
Google schaffe ich auch noch selbst :)
Ich meinte, was man sinnvolles damit machen kann.
Na hübsche Programme bauen:

Das sind im übrigen meine Flags:
-Wall -Wno-unused-result -Os -pipe -mips32 -mtune=mips32 -funit-at-a-time -static -march=4kc

Und schief geht es sobald boost/asio.hpp includiere bei
Code:
mips-linux-uclibc-g++  -Wall -Wno-unused-result -Os -pipe -mips32 -mtune=mips32 -funit-at-a-time -static -march=4kc -g       -I/include -I../lib/boost_1_47_0 -I../lib/cgicc-mips-installed/include/ -I. -L../lib/boost_1_47_0/stage/lib/ -lboost_system1    -c main.cpp -o .mips/main.o
mips-linux-uclibc-g++ -o .mips/sphinx.exe .mips/main.o -L../lib/cgicc-mips-installed/lib -lcgicc -nodefaultlibs -lstdc++ -lc -gcc
.mips/main.o: In function `get_system_category':
/home/freetz/sphinx_home/SE/server/embedded/base/../lib/boost_1_47_0/boost/asio/error.hpp:216: undefined reference to `boost::system::system_category()'
.mips/main.o: In function `boost::asio::detail::posix_tss_ptr_create(unsigned int&)':
/home/freetz/sphinx_home/SE/server/embedded/base/../lib/boost_1_47_0/boost/asio/detail/impl/posix_tss_ptr.ipp:34: undefined reference to `pthread_key_create'
.mips/main.o: In function `get_system_category':
/home/freetz/sphinx_home/SE/server/embedded/base/../lib/boost_1_47_0/boost/asio/error.hpp:216: undefined reference to `boost::system::system_category()'
.mips/main.o: In function `~posix_tss_ptr':
/home/freetz/sphinx_home/SE/server/embedded/base/../lib/boost_1_47_0/boost/asio/detail/posix_tss_ptr.hpp:48: undefined reference to `pthread_key_delete'
collect2: ld returned 1 exit status
make: *** [.mips/sphinx.exe] Fehler 1
 
Da ist schon mal nichts mehr von __clzsi2 zu erkennen, was noch im ersten Beitrag der Fehler war.

Hier fehlt noch zum einen -lpthread, zum anderen sollte "boost::system::system_category()" wohl irgendwo in der Boot Library definiert werden.
 
Grundsätzlich ist es keine gute Idee (kann ich aus eigener leidlicher Erfahrung sagen ;-)), wenn u.U. includes vom Build-System genutzt werden (wie z.B. bei -I/include möglich).

Wenn das deine Probleme nicht löst, schau dir doch mal das Makefile bei OpenWRT an (ist momentan für 1_38_0). Eventuell auch die Patches dort...
 
Das -I/include ist sowieso Unsinn, es sei denn, man hat zufällig ein Verzeichnis /include aus dem Host-System. Es wäre also sinnvoll, nachzusehen, welche Variable davor steht und leer ist.
 
Da ist schon mal nichts mehr von __clzsi2 zu erkennen, was noch im ersten Beitrag der Fehler war.
Ja weil ich die betreffende Methode selbst implementiert habe ;)

Hier fehlt noch zum einen -lpthread, zum anderen sollte "boost::system::system_category()" wohl irgendwo in der Boot Library definiert werden.
Wenn ich -lpthread hinzufüge erhalte ich die selbe Ausgabe...

bzgl. boost::system::system_category() sollte das durch -L../lib/boost_1_47_0/stage/lib/ ja eigentlich erschlagen sein, da sich diese in der Boot.System Library befindet?

Grundsätzlich ist es keine gute Idee (kann ich aus eigener leidlicher Erfahrung sagen ;-)), wenn u.U. includes vom Build-System genutzt werden (wie z.B. bei -I/include möglich).
-I/include wurde die Var nicht gesetzt verweist jetzt auf -I../lib/cgicc-linux-installed/include wobei diese durch -I../lib/cgicc-mips-installed/include/ eigentlich obsolet ist.

Wenn das deine Probleme nicht löst, schau dir doch mal das Makefile bei OpenWRT an (ist momentan für 1_38_0). Eventuell auch die Patches dort...
danke für den Hinweis. Hab schon den ganzen Tag nach Infos gesucht aber bislang leider nur von selbigen Problemen gehört
 
bzgl. boost::system::system_category() sollte das durch -L../lib/boost_1_47_0/stage/lib/ ja eigentlich erschlagen sein, da sich diese in der Boot.System Library befindet?
Auf die Gefahr hin das falsch verstanden zu haben: -L sagt ja nur, wo Libraries gesucht werden. Eventuell musst du die Lib, die "boost::system::system_category()" enthält, noch mit -l<welchelibauchimmer> hinzulinken??
 
In einem anderen Versuch hatte ich das schon gemacht -lboost_system änderte aber auch nichts an der Ausgabe
 
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.