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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Holger K. (holgerkraehe)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
Super! Vielen Dank.

Bei mir ist es die Version 5.2.1 hmmm...

von Holger K. (holgerkraehe)


Bewertung
0 lesenswert
nicht lesenswert
Musste von Ubuntu 15 auf 16.10 upgraden. nun hab ich auch 6.x

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.