Forum: Compiler & IDEs QT für ARM unter Ubuntu compilieren. Linker fehler.


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

Stackoverflow kann euch nicht das Wasser reichen.
Dort gibts nämlich keine Antworten.

Folgendes Problem.
Ich bin nach wie vor dran, QT unter Ubuntu für ARM zu kompilieren.
Also sprich, die Libraries welche dann auf dem Zielsystem zum Einsatz 
kommen. Zielsystem ist ein i.MX6 armv7 Prozessor.

Nun ich gehe grundsätzlich nach diesem Tutorial vor:
http://wiki.qt.io/RaspberryPi_Beginners_Guide

Habe dann aber dank diesem Post: 
Beitrag "Re: glibc mit Linaro toolchain für ARM" endlich mittels dem 
über apt-get install installierten Compiler das Problem mit glibc lösen 
können.

Ich habe dann im ordner qtbase, wie im tutorial gewünsch, ./configure 
aufgerufen.
1
./configure -device linux-imx6-g++ -device-option CROSS_COMPILE=arm-
2
linux-gnueabihf- -sysroot ~/Schreibtisch/LinuxDevelopment/rootfsOverlay 
3
-opensource -confirm-license -optimized-qmake -reduce-exports -release 
4
-make libs -prefix /usr/local/qt5imx -hostprefix /usr/local/qt5imx 
5
-no-opengl

Zuerst ohne -no-opengl dann kam der Fehler "keine Open GL Unterstützung" 
also ohne open GL (wollte ich eh nicht). Dann gings erstmal flott ans 
compilieren.... Sehr lange... Und am ende... Genau! Error!!!
1
qbitarray.o: relocation R_X86_64_32 against `.rodata.str1.8' can not be 
2
used when making a shared object; recompile with -fPIC

Immer wieder diese Meldungen vom Linker. Haufenweise mit verschiedenen 
Objektfiles.

Nun, es irritiert mich, dass da X86_64_32 steht. Ich kompiliere doch für 
ARM? Habe ich da was falsch gemacht?

Wenn ich jetzt einfach blind -fPIC bei den Compilerflags anfüge, dann 
wirds zum totalen Blindflug für mich. Daher frage ich mal hier obs 
überhaupt noch passen kann.

Hier: 
http://stackoverflow.com/questions/22540239/what-would-be-a-pratical-example-of-sysroot-and-prefix-options-for-qt 
werden die Optionen wie -sysroot gut beschrieben. Wie muss das sysroot 
denn aussehen?
Da ich mit Buildroot arbeite, bietet mir Buildroot an, ein overlay zu 
erstellen. Dies ist ein ordner welcher später über das eigentliche 
sysroot kopiert wird. Dies ist elegant um Dateien zu ergänzen. Ich habe 
diesen Overlay ordnert bei sysroot angegeben. Dieser ist grundsätzlich 
leer. Ist das ein Problem?

Danke schonmal

: Bearbeitet durch User
von R. R. (elec-lisper)


Bewertung
0 lesenswert
nicht lesenswert
Holger K. schrieb:
> Wenn ich jetzt einfach blind -fPIC bei den Compilerflags anfüge, dann
> wirds zum totalen Blindflug für mich. Daher frage ich mal hier obs
> überhaupt noch passen kann.

Warum wirds zum totalen Blindflug? PIC klingt jetzt erstmal nicht
verkehrt für ne shared library.

Theoretisch kannst du auch probieren Qt statisch zu übersetzen.
Ist zwar nicht so elegant, und verschwendet später bisschen RAM,
aber lieber statisch als garnicht.

von blubb (Gast)


Bewertung
1 lesenswert
nicht lesenswert
Warum denn selberbauen wenn es schon QT5 fertig als package gibt:
https://archlinuxarm.org/packages/armv7h/qt5-base

https://archlinuxarm.org/platforms/armv7/freescale

von Markus F. (mfro)


Bewertung
0 lesenswert
nicht lesenswert
Da wirst Du schon ein bißchen genauer hingucken müssen, wo genau (bei 
welchem Build-Schritt) der Fehler aufgetreten ist.

Holger K. schrieb:
> qbitarray.o: relocation R_X86_64_32 against `.rodata.str1.8' can not be
> used when making a shared object; recompile with -fPIC

Natürlich sieht das erst mal verkehrt aus: was hat X86-Code in einem 
ARM-Cross-Compilat zu suchen?

Sieht auf den ersten Blick so aus, als ob das Build-Script den falschen 
Compiler verwendet hätte.

Das muß aber nicht unbedingt sein - wenn Qt gebaut wird, müssen ja auch 
die Build-Tools (qmake etc.) gebaut werden, die ja weiterhin auf dem 
Hostsystem laufen sollen. Aus deinem Log-Schnipselchen ist nicht zu 
erkennen, was da gerade hätte passieren sollen, das mußt Du wohl selbst 
rausfinden.

von Rolf M. (rmagnus)


Bewertung
0 lesenswert
nicht lesenswert
Robin R. schrieb:
> Warum wirds zum totalen Blindflug? PIC klingt jetzt erstmal nicht
> verkehrt für ne shared library.

-fPIC ist zwingende Grundvoraussetzung für shared libraries. Alle 
Source-Files, die in eine solche reinkommen, müssen damit übersetzt 
werden. Die Frage ist allerdings, warum qmake das in diesem Fall 
weglässt.

von Holger K. (holgerkraehe)


Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank für eure Antworten.

Ich habe die Lösung gefunden.

Das Problem war nur, dass ich das echte sysroot von Buildroot angeben 
musste und nicht meinen overlay ordner.

Das war dann die korrekte Aufrufe:
1
./configure -device linux-imx6-g++ -device-option CROSS_COMPILE=arm-
2
linux-gnueabihf- -sysroot /opt/buildroot/output/target 
3
-opensource -confirm-license -optimized-qmake -reduce-exports -release 
4
-make libs -prefix /usr/local/qt5imx -hostprefix /usr/local/qt5imx 
5
-no-opengl

Damit hats dann korrekt compiliert.

Ich frage mich nur noch, was ich unter meinem host bei -hostprefix 
/usr/local/qt5imx  finden kann. Da hats ein paar wenige Dateien drinn.

libQT5Bootstrap.a und .prl.
Weiss jemand wozu diese sind?

von Rolf M. (rmagnus)


Bewertung
0 lesenswert
nicht lesenswert
Und ein Bin-Verzeichnis mit ein paar Executables gibt's da nicht? Ich 
würde vermuten, dass diese Lib benutzt wird, um qmake, moc, lupdate 
u.s.w. zu bauen. Diese werden nativ auf deinem build-Rechner benötigt.

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.