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
 

olistudent

IPPF-Urgestein
Mitglied seit
19 Okt 2004
Beiträge
14,779
Punkte für Reaktionen
10
Punkte
38
Ich wusste gar nicht, dass wir ein Paket für Boost haben!?

Gruß
Oliver
 

RalfFriedl

IPPF-Urgestein
Mitglied seit
22 Apr 2007
Beiträge
12,343
Punkte für Reaktionen
1
Punkte
0

Tester1337

Neuer User
Mitglied seit
23 Sep 2011
Beiträge
26
Punkte für Reaktionen
0
Punkte
0
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
 

RalfFriedl

IPPF-Urgestein
Mitglied seit
22 Apr 2007
Beiträge
12,343
Punkte für Reaktionen
1
Punkte
0
Google schaffe ich auch noch selbst :)
Ich meinte, was man sinnvolles damit machen kann.

Du brauchst beim Übersetzen noch die Option -march=4kc
 

Tester1337

Neuer User
Mitglied seit
23 Sep 2011
Beiträge
26
Punkte für Reaktionen
0
Punkte
0
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
 

RalfFriedl

IPPF-Urgestein
Mitglied seit
22 Apr 2007
Beiträge
12,343
Punkte für Reaktionen
1
Punkte
0
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.
 

MaxMuster

IPPF-Promi
Mitglied seit
1 Feb 2005
Beiträge
6,932
Punkte für Reaktionen
1
Punkte
36
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...
 

RalfFriedl

IPPF-Urgestein
Mitglied seit
22 Apr 2007
Beiträge
12,343
Punkte für Reaktionen
1
Punkte
0
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.
 

Tester1337

Neuer User
Mitglied seit
23 Sep 2011
Beiträge
26
Punkte für Reaktionen
0
Punkte
0
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
 

MaxMuster

IPPF-Promi
Mitglied seit
1 Feb 2005
Beiträge
6,932
Punkte für Reaktionen
1
Punkte
36
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??
 

Tester1337

Neuer User
Mitglied seit
23 Sep 2011
Beiträge
26
Punkte für Reaktionen
0
Punkte
0
In einem anderen Versuch hatte ich das schon gemacht -lboost_system änderte aber auch nichts an der Ausgabe