Forum: Compiler & IDEs glibc mit Linaro toolchain für ARM


von Holger K. (holgerkraehe)


Lesenswert?

Hallo zusammen

Ich versuche aktuell auf Ubuntu ein Programm für ein Embeddedlinux 
target zu erstellen. Das Target is ein Evalboard von NXP mit einem i.MX6 
und LCD.

Dies versuche ich aktuell mit QT
Dabei gehe ich grundsätzlich nach diesem Tutorial vor:
http://wiki.qt.io/RaspberryPi_Beginners_Guide

Ich verwende allerdings folgende Toolchain:
gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf

Nun stecke ich aber fest.
Compiling qtbase

Hier gibt es ein Problem.
Ich rufe das ganze wie folgt auf:
1
 ./configure -device linux-imx6-g++ -device-option CROSS_COMPILE=/opt/toolchain/bin/arm-linux-gnueabihf- -sysroot ~/Schreibtisch/LinuxDevelopment/rootfsOverlay -opensource -confirm-license -optimized-qmake -reduce-exports -release -make libs -prefix /usr/local/qt5imx -hostprefix /usr/local/qt5imx

Danach hats einiges gemacht und endet dann mit:
1
ERROR: Cannot compile a minimal program. The toolchain or QMakeSpec is broken.

Ein blick in den Log sagt:
1
> /opt/toolchain/bin/arm-linux-gnueabihf-g++ -c -pipe -march=armv7-a -mfpu=neon -DLINUX=1 -DEGL_API_FB=1 -mfloat-abi=hard --sysroot=/home/holger/Schreibtisch/LinuxDevelopment/rootfsOverlay -O2 -Wall -W -fPIC  -I. -I/opt/QTLIB/qt5/qtbase/mkspecs/devices/linux-imx6-g++ -o verifyspec.o verifyspec.cpp
2
> /opt/toolchain/bin/arm-linux-gnueabihf-g++ -mfloat-abi=hard --sysroot=/home/holger/Schreibtisch/LinuxDevelopment/rootfsOverlay -Wl,-O1 -fuse-ld=gold -o verifyspec verifyspec.o    
3
> /opt/toolchain/bin/../lib/gcc/arm-linux-gnueabihf/6.2.1/../../../../arm-linux-gnueabihf/bin/ld.gold: error: cannot open crt1.o: Datei oder Verzeichnis nicht gefunden
4
> /opt/toolchain/bin/../lib/gcc/arm-linux-gnueabihf/6.2.1/../../../../arm-linux-gnueabihf/bin/ld.gold: error: cannot open crti.o: Datei oder Verzeichnis nicht gefunden
5
> /opt/toolchain/bin/../lib/gcc/arm-linux-gnueabihf/6.2.1/../../../../arm-linux-gnueabihf/bin/ld.gold: error: cannot open crtn.o: Datei oder Verzeichnis nicht gefunden
6
> /opt/toolchain/bin/../lib/gcc/arm-linux-gnueabihf/6.2.1/../../../../arm-linux-gnueabihf/bin/ld.gold: error: cannot find -lm
7
> /opt/toolchain/bin/../lib/gcc/arm-linux-gnueabihf/6.2.1/../../../../arm-linux-gnueabihf/bin/ld.gold: error: cannot find -lc
8
> collect2: error: ld returned 1 exit status
9
> Makefile:64: recipe for target 'verifyspec' failed
10
> make: *** [verifyspec] Error 1


Es findet also die Datei crt1.o nicht. Nebst anderen.
Nach google, scheint es so als ob mir die glibc fehlen würde.

Nun, dachte ich also glibc runterladen und mit dem arm compiler 
compilieren. Dann gabs aber auch errors.
1
<stdin>: In function 'dummy':
2
<stdin>:10:36: error: 'REG_RBP' undeclared (first use in this function)
3
<stdin>:9:26: note: in expansion of macro 'ucontext'
4
<stdin>:10:20: note: in expansion of macro 'mcontext'
5
<stdin>:11:61: note: in expansion of macro 'mreg'
6
<stdin>:10:36: note: each undeclared identifier is reported only once for each function it appears in
7
<stdin>:9:26: note: in expansion of macro 'ucontext'
8
<stdin>:10:20: note: in expansion of macro 'mcontext'
9
<stdin>:11:61: note: in expansion of macro 'mreg'
10
<stdin>:10:36: error: 'REG_RSP' undeclared (first use in this function)


Nun bin ich am Ende mit meinem Wissen und mit Google.
Ich hoffe jemand von euch kann mir weiterhelfen.

Ich möchte einfach nur QT Apps unter ubuntu für mein i.MX6 Zielsystem 
schreiben. Und dafür sitze ich nun schon den ganzen Samstag vor dem PC 
und hab auch gestern Abend schon begonnen. Bisher ohne Erfolg.

Danke

von Arc N. (arc)


Lesenswert?

Glibc gibt's auch als Binary...
https://releases.linaro.org/components/toolchain/binaries/latest/arm-linux-gnueabihf/

Vielleicht hilft auch
https://forum.qt.io/topic/57443/how-to-cross-compile-qt-for-arm-imx6

Den Kram komplett selbst bauen ginge zwar auch, aber...

von Holger K. (holgerkraehe)


Lesenswert?

Arc N. schrieb:
> Glibc gibt's auch als Binary...
> 
https://releases.linaro.org/components/toolchain/binaries/latest/arm-linux-gnueabihf/

Vielen Dank für diesen Hinweis.
Das hab ich wohl völlig übersehen.
Da drinn hab ich auch die crt1.o gefunden.

Nun wirds spannend. Das binary von deinem Link ist ein sysroot "abbild".
Muss ich die dateien so wie sie sind auf meinem zielsystem also auf dem 
evalboard auf die sd-karte kopieren?

Genügt es wenn ich /usr/lib kopiere (darin befinden sich die fehlenden 
dateien) oder muss ich alles kopieren?

Unter meinem als erstes geposteten tutorial link, gibt es die anweisung 
mittels
1
./fixQualifiedLibraryPaths

Die Pfade anzupassen.
Bei genauerem hinsehen, sieht man, dass dieses skript alle absoluten 
symlinks in relative ändert.

(Dies habe ich aus einem anderen, neueren skript 
sysroot-relativelinks.py entnommen)

Kann mir jemand erklären in wie fern dies notwendig ist? bzw was dies 
bewirkt?

Den zweiten link schaue ich mir auch noch näher an.
Vermutlich ist es die Mischung aus beiden Links welche zum Ziel führen 
wird.

: Bearbeitet durch User
von Markus F. (mfro)


Lesenswert?

Holger K. schrieb:
> Arc N. schrieb:
>> Glibc gibt's auch als Binary...
>>
> 
https://releases.linaro.org/components/toolchain/binaries/latest/arm-linux-gnueabihf/

Die arm-linux-gnueabihf- Cross-Compiler Toolchain gibt's fertig, 
komplett und aktuell im Ubuntu-Repository, da muß man nicht "von Hand" 
ruminstallieren:

1
sudo apt-get install g++-arm-linux-gnueabihf

Das war's.

von Holger K. (holgerkraehe)


Lesenswert?

Markus F. schrieb:
> apt-get install g++-arm-linux-gnueabihf

Klingt ja fast zu schön um Wahr zu sein.
Und wo liegt die dann? Damit ich den Pfad bei Buildroot angeben kann.
Und welche GCC Version ist dass dann?

Danke

von Markus F. (mfro)


Lesenswert?

Holger K. schrieb:
> Markus F. schrieb:
>> apt-get install g++-arm-linux-gnueabihf
>
> Klingt ja fast zu schön um Wahr zu sein.
> Und wo liegt die dann? Damit ich den Pfad bei Buildroot angeben kann.
> Und welche GCC Version ist dass dann?
>
> Danke

Da:
1
$ arm-linux-gnueabihf-g++ -v
2
Using built-in specs.
3
COLLECT_GCC=arm-linux-gnueabihf-g++
4
COLLECT_LTO_WRAPPER=/usr/lib/gcc-cross/arm-linux-gnueabihf/6/lto-wrapper
5
Target: arm-linux-gnueabihf
6
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 6.2.0-5ubuntu12' --with-bugurl=file:///usr/share/doc/gcc-6/README.Bugs --enable-languages=c,ada,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-6 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-libitm --disable-libquadmath --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-6-armhf-cross/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-6-armhf-cross --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-6-armhf-cross --with-arch-directory=arm --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --disable-libgcj --enable-objc-gc --enable-multiarch --enable-multilib --disable-sjlj-exceptions --with-arch=armv7-a --with-fpu=vfpv3-d16 --with-float=hard --with-mode=thumb --disable-werror --enable-multilib --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=arm-linux-gnueabihf --program-prefix=arm-linux-gnueabihf- --includedir=/usr/arm-linux-gnueabihf/include
7
Thread model: posix
8
gcc version 6.2.0 20161005 (Ubuntu 6.2.0-5ubuntu12)

sysroot ist /

von Holger K. (holgerkraehe)


Lesenswert?

Super! Vielen Dank.

Bei mir ist es die Version 5.2.1 hmmm...

von Holger K. (holgerkraehe)


Lesenswert?

Musste von Ubuntu 15 auf 16.10 upgraden. nun hab ich auch 6.x

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.