Autor Thema: ARM Cross-Compiler - LibGCC bauen  (Gelesen 9430 mal)

akku

  • Beiträge: 3
    • Profil anzeigen
Gespeichert
« am: 01. August 2013, 23:26 »
Hallöle,

ich bin mehr oder weniger Anfänger und habe heute mal den Artikel ARM Cross-Compiler (http://www.lowlevel.eu/wiki/ARM_Cross-Compiler) ausprobiert, einfach da ich mich in Zukunft mit ARM beschäftigen will. Der Artikel ist super und alles sehr gut erklärt. Der letzte Schritt, LibGCC bauen, macht mir allerdings Probleme.

Generell Frage: wie weit komme ich ohne diesen Schritt. Werde ich zumindest ein Hello World hinbekommen ohne dass ich die lib brauche?

Dann die eigentliche Frage natürlich: wie fixen? Ich bin auf nem x86_64 Ubuntu  12.04 und habe mir für gewissen Anwendungen die 32 bit multilib geladen und ein upgrade ausgeführt. Ich vermute ja, dass das irgendwie daher kommt. Hier der Compiler-Verlauf am Ende, nachdem ich "make all-target-libgcc" ausführe:

make[2]: Leaving directory `/usr/src/gcc-arm/arm-unknown-linux-gnueabi/libgcc'
/usr/src/gcc-arm/./gcc/xgcc -B/usr/src/gcc-arm/./gcc/ -B/usr/cross/arm/arm-unknown-linux-gnueabi/bin/ -B/usr/cross/arm/arm-unknown-linux-gnueabi/lib/ -isystem /usr/cross/arm/arm-unknown-linux-gnueabi/include -isystem /usr/cross/arm/arm-unknown-linux-gnueabi/sys-include    -g -O2 -O2  -g -O2 -DIN_GCC -DCROSS_DIRECTORY_STRUCTURE  -W -Wall -Wwrite-strings -Wcast-qual -Wstrict-prototypes -Wmissing-prototypes -Wold-style-definition  -isystem ./include   -fPIC -fno-inline -g -DIN_LIBGCC2 -fbuilding-libgcc -fno-stack-protector -Dinhibit_libc  -fPIC -fno-inline -I. -I. -I../.././gcc -I../../../cross-arm-gcc/libgcc -I../../../cross-arm-gcc/libgcc/. -I../../../cross-arm-gcc/libgcc/../gcc -I../../../cross-arm-gcc/libgcc/../include  -DHAVE_CC_TLS  -o emutls.o -MT emutls.o -MD -MP -MF emutls.dep -fexceptions -c ../../../cross-arm-gcc/libgcc/emutls.c -fvisibility=hidden -DHIDE_EXPORTS
In file included from ../../../cross-arm-gcc/libgcc/gthr.h:150:0,
                 from ../../../cross-arm-gcc/libgcc/emutls.c:31:
./gthr-default.h:41:21: fatal error: pthread.h: No such file or directory
compilation terminated.
make[1]: *** [emutls.o] Error 1
make[1]: Leaving directory `/usr/src/gcc-arm/arm-unknown-linux-gnueabi/libgcc'
make: *** [all-target-libgcc] Error 2

Hoffe mir kann jemand helfen. Hoffe ja nicht, dass mich das daran hindert ARM zu lernen.


DerHartmut

  • Beiträge: 236
    • Profil anzeigen
    • Mein Blog
Gespeichert
« Antwort #1 am: 02. August 2013, 17:01 »
Hi,

danke für's Feedback! :-)

Die libgcc ist nicht unbedingt notwendig, allerdings:

Zitat
Für bestimmte Operationen, z.B. Stack Unwinding, Ganzzahl- und Fließkommaarithmetik und andere Unterstützungsfunktionen benötigt man zusätzlich die LibGCC. Diese kann man zusätzlich erstellen:

Wenn ich mir die Fehlerausgabe anschauen scheint's, als ob die Header-Dateien zu pthread fehlt.

Probier mal:

apt-cache search pthread
und halte nach einem Paket namens libpthread-dev o.ä. Ausschau und installier das.
$_="krJhruaesrltre c a cnp,ohet";$_.=$1,print$2while s/(..)(.)//;
Nutze die Macht, nutze Perl ;-)

akku

  • Beiträge: 3
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 02. August 2013, 17:22 »
Hier ein paar Resultate:

$apt-cache search pthread:
glibc-doc - Embedded GNU C Library: Documentation
libevent-pthreads-2.0-5 - Asynchronous event notification library (pthreads)
libilmbase6 - several utility libraries from ILM used by OpenEXR
libpthread-stubs0 - pthread stubs not provided by native libc
libpthread-stubs0-dev - pthread stubs not provided by native libc, development files
abyss - de novo, parallel, sequence assembler for short reads
blcr-testsuite - Userspace tools to Checkpoint and Restart Linux processes
blcr-util - Userspace tools to Checkpoint and Restart Linux processes
lib32cr0 - (32bit) Libraries to Checkpoint and Restart Linux processes
libcr-dbg - Libraries to Checkpoint and Restart Linux processes
libcr-dev - Development files for BLCR
libcr0 - Libraries to Checkpoint and Restart Linux processes
libpthread-workqueue-dev - thread pool library (development files)
libpthread-workqueue0 - thread pool library
libzthread-2.3-2 - Object-oriented synchronization library for C++
libzthread-dev - Object-oriented synchronization library for C++
pbzip2 - parallel bzip2 implementation
tau - Tuning and Analysis Utilities - base profiling toolkit

$whereis pthread
/usr/include/pthread.h

$ locate pthread.so
/lib/i386-linux-gnu/libpthread.so.0
/lib/x86_64-linux-gnu/libpthread.so.0
/lib32/libpthread.so.0
/usr/arm-linux-gnueabi/lib/libpthread.so
/usr/arm-linux-gnueabi/lib/libpthread.so.0
/usr/lib/libgpgme-pthread.so.11
/usr/lib/libgpgme-pthread.so.11.7.0
/usr/lib/x86_64-linux-gnu/libpthread.so
/usr/lib32/libpthread.so

Das Tutorial auf OS-Dev führt mich aufs selbe.

P.S.

$ sudo apt-get install libpthread-dev
Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: Unable to locate package libpthread-dev

$ sudo apt-get install libpthread-stubs0-dev
Reading package lists... Done
Building dependency tree       
Reading state information... Done
libpthread-stubs0-dev is already the newest version.
The following packages were automatically installed and are no longer required:
  libgcc1-armel-cross libc6-armel-cross gcc-4.6-arm-linux-gnueabi
  libgomp1-armel-cross cpp-4.6-arm-linux-gnueabi linux-libc-dev-armel-cross
  gcc-4.6-arm-linux-gnueabi-base binutils-arm-linux-gnueabi
  libc6-dev-armel-cross cpp-arm-linux-gnueabi
Use 'apt-get autoremove' to remove them.
0 upgraded, 0 newly installed, 0 to remove and 68 not upgraded.
« Letzte Änderung: 02. August 2013, 17:29 von akku »

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 02. August 2013, 17:37 »
Bin ich der einzige, den das "linux" in host stört? Gegen irgendwelche Linuxheader wie pthread.h zu bauen ist doch Unsinn, wenn der Code das nachher gar nicht implementiert.
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

akku

  • Beiträge: 3
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 02. August 2013, 18:00 »
Naja, aber es ist halt das worauf es in dem Artikel bei mir herausläuft. Oder ich habe in meinem System irgendwie eine Fehlkonfiguration. Ich hab den Artikel aber zu 100% genauso gemacht wie es da steht. Dasselbe passiert auch auf OS-Dev Tutorial, welches mich an demselben Error hängen lässt.

Bin gerne bereit für Alternativen. Könnte eine vorkompilierte Tool-Chain weiterhelfen, wenn das nicht geht? Würde aber schon gerne nen eigenen Cross-compi baun. Ich versuche demnächst mal das hier: http://ftp.snapgear.org/pub/snapgear/tools/arm-linux/build-arm-linux-3.4.4

EDIT

nein also ich komme hier nicht weiter. Habe mir nen Ubuntu 12.04 x86_64 auf meinen Lappi gemacht ($uname -a ...3.5.0-23-generic #35~precise1-Ubuntu SMP Fri Jan 25 17:13:26 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux ) mit Standard gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5) und da komm ich wieder auf genau denselben Fehler. Ich hab die Schritte mal dokumentiert die ich gemacht habe.

1 ===
=====

download gcc-4.6.3, binutils-2.2, extract packages

2 ===
=====

export PREFIX=/home/akku/Desktop/cross/arm
export TARGET=arm-unknown-linux-gnu

3 ===
=====

mkdir build-binutils-2.22; cd build-binutils-2.22;
../binutils-2.22/configure --target=$TARGET --prefix=$PREFIX;
make -j4 all;
make install;

4 ===
=====

Building GCC requires GMP 4.2+, MPFR 2.3.1+ and MPC 0.8.0+
cd gcc-4.6.3;
./contrib/download_prerequisites

5 ===
=====

mkdir build-gcc-4.6.3; cd build-gcc-4.6.3;
export PATH=$PATH:$PREFIX/bin;
../gcc-4.6.3/configure --target=$TARGET --prefix=$PREFIX --enable-languages=c --without-headers
make -j4 all-gcc
make install-gcc

6 ===
=====

make all-target-libgcc // error passiert hier!

// TODO

make install-target-libgcc
« Letzte Änderung: 04. August 2013, 12:06 von akku »

 

Einloggen