Cross compile - Linker findet nicht

Benutzeravatar
willi4willi
Lazarusforum e. V.
Beiträge: 155
Registriert: Sa 1. Nov 2008, 18:06
OS, Lazarus, FPC: Windows, Linux (debian) / Lazarus 3.2 / FPC 3.2.2
CPU-Target: i386, win64, arm

Cross compile - Linker findet nicht

Beitrag von willi4willi »

Hallo!

ich möchte Programme für den Raspberry PI erstellen und dazu einen Cross-Compiler verwenden.

Der Linker gibt mir eine Fehlermeldung aus, dass er verschiedene Dinge nicht finden kann:

Code: Alles auswählen

 
Einstellungen geändert, sauberes Neucompilieren mit -B
/usr/lib/fpc/bin/i386-linux/arm-linux-ld: warning: link.res contains output sections; did you forget -T?
/usr/lib/fpc/bin/i386-linux/arm-linux-ld: cannot find -ldl
/usr/lib/fpc/bin/i386-linux/arm-linux-ld: cannot find -lpthread
/usr/lib/fpc/bin/i386-linux/arm-linux-ld: cannot find -lX11
/usr/lib/fpc/bin/i386-linux/arm-linux-ld: cannot find -lgdk_pixbuf-2.0
/usr/lib/fpc/bin/i386-linux/arm-linux-ld: cannot find -lgtk-x11-2.0
/usr/lib/fpc/bin/i386-linux/arm-linux-ld: cannot find -lgdk-x11-2.0
/usr/lib/fpc/bin/i386-linux/arm-linux-ld: cannot find -lgobject-2.0
/usr/lib/fpc/bin/i386-linux/arm-linux-ld: cannot find -lglib-2.0
/usr/lib/fpc/bin/i386-linux/arm-linux-ld: cannot find -lgthread-2.0
/usr/lib/fpc/bin/i386-linux/arm-linux-ld: cannot find -lgmodule-2.0
/usr/lib/fpc/bin/i386-linux/arm-linux-ld: cannot find -lpango-1.0
/usr/lib/fpc/bin/i386-linux/arm-linux-ld: cannot find -lcairo
/usr/lib/fpc/bin/i386-linux/arm-linux-ld: cannot find -latk-1.0
/usr/lib/fpc/bin/i386-linux/arm-linux-ld: cannot find -lc
project1.lpr(22) Error: Error while linking
project1.lpr(22) Fatal: There were 1 errors compiling module, stopping
 


Es sind offensichtlich Bibliotheken?
Was muss ich installieren, kopieren oder einstellen, damit das funktioniert?

Kennt sich jemand damit aus?

Viele Grüße

Willi4willi
 

Viele Grüße

Willi4Willi

------------

gocher
Beiträge: 298
Registriert: Di 23. Nov 2010, 23:41
OS, Lazarus, FPC: Ubuntu/Win, Lazarus trunk, FPC trunk
CPU-Target: 32Bit/64Bit
Wohnort: Geldern
Kontaktdaten:

Re: Cross compile - Linker findet nicht

Beitrag von gocher »

Die Bibliotheken findest Du unter
http://www.gtk.org/download/index.php
MfG Gocher
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me

Benutzeravatar
willi4willi
Lazarusforum e. V.
Beiträge: 155
Registriert: Sa 1. Nov 2008, 18:06
OS, Lazarus, FPC: Windows, Linux (debian) / Lazarus 3.2 / FPC 3.2.2
CPU-Target: i386, win64, arm

Re: Cross compile - Linker findet nicht

Beitrag von willi4willi »

Ich dachte diese hätte ich schon über das Repository von ubuntu installiert.

Code: Alles auswählen

 
root@LazarusSystem:# sudo apt-get install libgtk2.0-dev 
Paketlisten werden gelesen... Fertig
Abhängigkeitsbaum wird aufgebaut       
Statusinformationen werden eingelesen... Fertig
libgtk2.0-dev ist schon die neueste Version.
0 aktualisiert, 0 neu installiert, 0 zu entfernen und 0 nicht aktualisiert.
 


Und unter /usr/lib/i386-linux-gnu finde ich auch soetwas wie:

Code: Alles auswählen

 
 
. . .
 
lrwxrwxrwx 1 root root      19 Jul  6 23:42 libgdk-3.so.0 -> libgdk-3.so.0.400.2
-rw-r--r-- 1 root root  499372 Jul  6 23:42 libgdk-3.so.0.400.2
lrwxrwxrwx 1 root root      21 Dez 20  2011 libgdkmm-2.4.so.1 -> libgdkmm-2.4.so.1.1.0
-rw-r--r-- 1 root root  298792 Dez 20  2011 libgdkmm-2.4.so.1.1.0
lrwxrwxrwx 1 root root      29 Apr 16  2012 libgdk_pixbuf-2.0.so -> libgdk_pixbuf-2.0.so.0.2600.1
lrwxrwxrwx 1 root root      29 Apr 16  2012 libgdk_pixbuf-2.0.so.0 -> libgdk_pixbuf-2.0.so.0.2600.1
-rw-r--r-- 1 root root  128964 Apr 16  2012 libgdk_pixbuf-2.0.so.0.2600.1
lrwxrwxrwx 1 root root      34 Apr 16  2012 libgdk_pixbuf_xlib-2.0.so -> libgdk_pixbuf_xlib-2.0.so.0.2600.1
lrwxrwxrwx 1 root root      34 Apr 16  2012 libgdk_pixbuf_xlib-2.0.so.0 -> libgdk_pixbuf_xlib-2.0.so.0.2600.1
-rw-r--r-- 1 root root   67136 Apr 16  2012 libgdk_pixbuf_xlib-2.0.so.0.2600.1
-rw-r--r-- 1 root root 1038266 Mär 26  2012 libgdk-x11-2.0.a
lrwxrwxrwx 1 root root      27 Mär 26  2012 libgdk-x11-2.0.so -> libgdk-x11-2.0.so.0.2400.10
lrwxrwxrwx 1 root root      27 Mär 26  2012 libgdk-x11-2.0.so.0 -> libgdk-x11-2.0.so.0.2400.10
-rw-r--r-- 1 root root  712724 Mär 26  2012 libgdk-x11-2.0.so.0.2400.10
lrwxrwxrwx 1 root root      14 Dez 30  2011 libgd.so.2 -> libgd.so.2.0.0
-rw-r--r-- 1 root root  262968 Dez 30  2011 libgd.so.2.0.0
lrwxrwxrwx 1 root root      15 Mär 23  2012 libgdu.so.0 -> libgdu.so.0.0.0
-rw-r--r-- 1 root root  236008 Mär 23  2012 libgdu.so.0.0.0
lrwxrwxrwx 1 root root      15 Mär 13  2012 libgee.so.2 -> libgee.so.2.0.0
-rw-r--r-- 1 root root  346520 Mär 13  2012 libgee.so.2.0.0
lrwxrwxrwx 1 root root      21 Dez  3  2011 libgettextpo.so -> libgettextpo.so.0.5.1
lrwxrwxrwx 1 root root      21 Dez  3  2011 libgettextpo.so.0 -> libgettextpo.so.0.5.1
-rw-r--r-- 1 root root  289588 Dez  3  2011 libgettextpo.so.0.5.1
-rw-r--r-- 1 root root 2363382 Jun  6 22:00 libgio-2.0.a
lrwxrwxrwx 1 root root      22 Jun  6 21:59 libgio-2.0.so -> libgio-2.0.so.0.3200.3
lrwxrwxrwx 1 root root      22 Jun  6 21:59 libgio-2.0.so.0 -> libgio-2.0.so.0.3200.3
-rw-r--r-- 1 root root 1401664 Jun  6 21:59 libgio-2.0.so.0.3200.3
 
. . .
 
 


Trotzdem funktioniert es nicht. Wo liegt mein Fehler?
 

Viele Grüße

Willi4Willi

------------

knight
Beiträge: 802
Registriert: Mi 13. Sep 2006, 22:30

Re: Cross compile - Linker findet nicht

Beitrag von knight »

Du benötigst die Bibliotheken für die Zielplattform (arm-linux). Auf dem Entwicklungsrechner hast du vermutlich (nur) die x86-linux Bibliotheken.

knight

carli
Beiträge: 657
Registriert: Sa 9. Jan 2010, 17:32
OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
CPU-Target: 64Bit

Re: Cross compile - Linker findet nicht

Beitrag von carli »

Was du brauchst ist eine Toolchain.
Du brauchst die .so's für 32 Bit ARM, am besten nimmst du gleich die vom Raspi. Anschließend noch den Linker-Pfad einstellen (in der fpc.cfg) und schon kannst du cross-kompilieren.

Benutzeravatar
willi4willi
Lazarusforum e. V.
Beiträge: 155
Registriert: Sa 1. Nov 2008, 18:06
OS, Lazarus, FPC: Windows, Linux (debian) / Lazarus 3.2 / FPC 3.2.2
CPU-Target: i386, win64, arm

Re: Cross compile - Linker findet nicht

Beitrag von willi4willi »

Vielen Dank für die Tipps!

Ich habe alle Bibliotheken vom Raspi und den Suchpfad in der fpc.cfg angepasst. Nun findet er diese.

Doch ich habe mich zu früh gefreut.

Die nächsten Fehlermeldung ist diese:

Code: Alles auswählen

 
. . .
/usr/lib/fpc/bin/i386-linux/arm-linux-ld: error: Source object /home/bernd/Dokumente/leer/lib/arm-linux/project1.o has EABI version 0, but target project1 has EABI version 5
/usr/lib/fpc/bin/i386-linux/arm-linux-ld: failed to merge target specific data of file /home/bernd/Dokumente/leer/lib/arm-linux/project1.o
/usr/lib/fpc/bin/i386-linux/arm-linux-ld: error: Source object /usr/lib/fpc/units/arm-linux/rtl/system.o has EABI version 0, but target project1 has EABI version 5
/usr/lib/fpc/bin/i386-linux/arm-linux-ld: failed to merge target specific data of file /usr/lib/fpc/units/arm-linux/rtl/system.o
/usr/lib/fpc/bin/i386-linux/arm-linux-ld: error: Source object /usr/lib/fpc/units/arm-linux/rtl/fpintres.o has EABI version 0, but target project1 has EABI version 5
/usr/lib/fpc/bin/i386-linux/arm-linux-ld: failed to merge target specific data of file /usr/lib/fpc/units/arm-linux/rtl/fpintres.o
/usr/lib/fpc/bin/i386-linux/arm-linux-ld: error: Source object /usr/lib/fpc/units/arm-linux/rtl/objpas.o has EABI version 0, but target project1 has EABI version 5
/usr/lib/fpc/bin/i386-linux/arm-linux-ld: failed to merge target specific data of file /usr/lib/fpc/units/arm-linux/rtl/objpas.o
/usr/lib/fpc/bin/i386-linux/arm-linux-ld: error: Source object /usr/lib/lazarus/lcl/units/arm-linux/gtk2/interfaces.o has EABI version 0, but target project1 has EABI version 5
. . .
 


Unterschiedliche EABI-Versionen? Was ist das und wie bekomme ich die so hin, dass diese gleich sind?

Ich habe das Projekt "Aufräumen und Kompilieren ..." lassen und auch Lazarus mit dem Profil "Aufräumen und neu kompilieren" neu erstellt. Doch das brachte nichts.
 

Viele Grüße

Willi4Willi

------------

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: Cross compile - Linker findet nicht

Beitrag von Christian »

Du musst dem Assembler mitteilen, welche eabi Version du haben willst. Wenn du das crosscompiling wie im Wiki beschrieben einrichtest, ist dem so.

siehe http://wiki.freepascal.org/Setup_Cross_ ... _arm-linux
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Benutzeravatar
willi4willi
Lazarusforum e. V.
Beiträge: 155
Registriert: Sa 1. Nov 2008, 18:06
OS, Lazarus, FPC: Windows, Linux (debian) / Lazarus 3.2 / FPC 3.2.2
CPU-Target: i386, win64, arm

Re: Cross compile - Linker findet nicht

Beitrag von willi4willi »

Danke Christian,

ich habe, nachdem ich schon nach verschiedenen Anleitungen vorgegangen bin, einmal diese nachvollzogen.

Das sieht schon ganz gut aus. Die TestARM.pas funktioniert schon einmal auf dem Raspi.
Doch beim Konfigurieren und neuübersetzen von Lazarus mit den Einstellungen linux/arm bleibt er mit folgender Meldung hängen:

Code: Alles auswählen

 
TLazarusManager.Run starting /home/bernd/lazarus/lazarus ...
TMainIDE.ParseCmdLineOptions:
  PrimaryConfigPath="/home/bernd/.lazarus"
  SecondaryConfigPath="/etc/lazarus"
TMainIDE.DoOpenProjectFile select form in designer: Form1:TForm1 TDesigner
TBuildManager.SetBuildTargetIDE OS=Linux CPU=arm WS=gtk2
TBuildManager.SetBuildTargetIDE OS=Linux CPU=arm WS=gtk2
TLazPackageGraph.CheckIfCurPkgOutDirNeedsCompile  Compile was incomplete for FCL 1.0.1
  State file="/home/bernd/lazarus/packager/units/arm-linux/FCL.compiled"
[TExternalToolList.Run] CmdLine="/usr/bin/fpc -B  -MObjFPC -Scghi -O1 -Parm -g -gl -vewnhi -l -Fu/home/bernd/lazarus/packager/registration/ -FU/home/bernd/lazarus/packager/units/arm-linux/ fcllaz.pas" WorkDir="/home/bernd/lazarus/packager/registration/"
Hint: Start of reading config file /home/bernd/.fpc.cfg
Hint: Start of reading config file /etc/fpc.cfg
Hint: End of reading config file /etc/fpc.cfg
Hint: End of reading config file /home/bernd/.fpc.cfg
Free Pascal Compiler version 2.6.0 [2012/10/31] for arm
Copyright (c) 1993-2011 by Florian Klaempfl and others
Target OS: Linux for ARMEL
Compiling fcllaz.pas
Compiling registerfcl.pas
Compiling lazaruspackageintf.pas
Assembling lazaruspackageintf
lazaruspackageintf.pas(110) Error: Assembler /home/bernd/lazarus/fpc/binutils/as not found, switching to external assembling
lazaruspackageintf.pas(110) Fatal: There were 1 errors compiling module, stopping
TExternalToolList.Run Exception: /home/bernd/lazarus/packager/registration/lazaruspackageintf.pas(110) Fatal: There were 1 errors compiling module, stopping
TMainIDE.DoBuildLazarus: Compile AutoInstall Packages failed.
 


Der Assembler ist aber in dem Verzeichnis vorhanden. Es ist ein symb. Link zu /usr/local/bin/arm-linux-as. Die Zugriffsrechte sind o.k und wenn ich den in der Shell starte, funktioniert der auch.

Was hat Lazaraus nur? Ist der Fehler nicht der , was er vorgibt zu sein?

Wenn ich die IDE normal (linux/i386) übersetze, läuft der Vorgang durch.

Viele Grüße

Willi4willi
 

Viele Grüße

Willi4Willi

------------

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: Cross compile - Linker findet nicht

Beitrag von Christian »

Warum versuchst du Lazarus für das RPI zu übersetzen ?
Du kannst lazarus auf dem RPI einfach aus den Paketquellen mit apt-get install lazarus installieren...
Und um Programme crosszucompilieren brauchst du die IDE nicht neu zu übersetzen.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Benutzeravatar
willi4willi
Lazarusforum e. V.
Beiträge: 155
Registriert: Sa 1. Nov 2008, 18:06
OS, Lazarus, FPC: Windows, Linux (debian) / Lazarus 3.2 / FPC 3.2.2
CPU-Target: i386, win64, arm

Re: Cross compile - Linker findet nicht

Beitrag von willi4willi »

Lazarus auf dem Raspi direkt aus dem Repository zu installieren und zu nutzen funktioniert wunderbar. :D
Problem hier: Geschwindigkeit (was will man von dem keinen Ding auch verlangen), keine Nutzung von zusätzlichen Komponenten (IDE lässt sich bei mir nicht übersetzen, vermute mal der Speicher reicht nicht). :(

Darum ist das für mich nur eine Alternative, wenn Crosscompiling nicht funktioniert.
Entwicklung unter Linux-i386 und kompilieren auf dem Raspi! Dabei ist immer das Bangen, dass die Unterschiede der FPC/Lazarus-Versionen die Übersetzung nicht beeinflussen.

Aber warum funktioniert das Cosscompilieren bei mir nicht?
Es sollte doch! Wenn andere Lazarus-Nutzer damit keine Probleme haben, muss ich doch irgendetwas falsch machen. :?
 

Viele Grüße

Willi4Willi

------------

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: Cross compile - Linker findet nicht

Beitrag von Christian »

Ich versth immer noch nicht was du mit ner für arm kompilierten IDE willst.
Die läuft doch auf dienem System eh nicht.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Benutzeravatar
willi4willi
Lazarusforum e. V.
Beiträge: 155
Registriert: Sa 1. Nov 2008, 18:06
OS, Lazarus, FPC: Windows, Linux (debian) / Lazarus 3.2 / FPC 3.2.2
CPU-Target: i386, win64, arm

Re: Cross compile - Linker findet nicht

Beitrag von willi4willi »

.
Es geht nicht um die IDE sondern um die LCL und die Pakete, weil die benötige ich für das Raspi-Programm.

Die Vorgehensweise laut Beschreibung:

http://wiki.freepascal.org/Setup_Cross_Compile_For_ARM#Configure_Lazarus_for_cross_Compile hat geschrieben: Configure Lazarus for cross Compile

Now you must cross compile the LCL and Package Registration, this part come from HERE.
From the IDE:
In Tools -> Options -> Environment -> Files, set the Compiler path to the path to fpc. Normally this is already done.
Then open Tools / Configure Build Lazarus / Advanced Build Options.
Set Target OS as linux and Target CPU as arm.
Set LCL and Package registration to Build (the middle radio button) and all other to None (left radio buttons).
Click the Build button.


In den alten Lazarus-Versionen konnte man noch einstellen, was man wie übersetzen möchte und was nicht. Das Dialogfenster "Lazarus kompilieren einrichten ..." sieht in der von mir nun verwendeten Version 1.0.2 völlig anders aus. Da kann man das Häkchen für IDE nicht herausnehmen.

Liegt dort das Problem für diese Fehlermeldung?

Code: Alles auswählen

/home/bernd/lazarus/packager/registration/lazaruspackageintf.pas(110) Error: Assembler /home/bernd/lazarus/fpc/binutils/as not found, switching to external assembling
/home/bernd/lazarus/packager/registration/lazaruspackageintf.pas(110) Fatal: There were 1 errors compiling module, stopping
 


Lazarus sagt mir, dass es den Assembler /home/bernd/lazarus/fpc/binutils/as nicht finden kann. Den gibt es aber an der Stelle (als Link). In der Shell kann ich ihn starten.

Das ist mein Problem.

Zu Deiner Frage: Mein großes Ziel ist es, ein Programm am PC zu entwickeln für Linux, Windows und den Raspberri Pi. Das Programm für Zielplattform übersetzen, hinkopieren --> läuft.

Viele Grüße

Willi4willi
 

Viele Grüße

Willi4Willi

------------

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Cross compile - Linker findet nicht

Beitrag von mschnell »

willi4willi hat geschrieben:In den alten Lazarus-Versionen konnte man noch einstellen, was man wie übersetzen möchte und was nicht. Das Dialogfenster "Lazarus kompilieren einrichten ..." sieht in der von mir nun verwendeten Version 1.0.2 völlig anders aus. Da kann man das Häkchen für IDE nicht herausnehmen.


Um die LCL in Deinem Programm zu benutzen, musst du (beim neuen Lazarus) die Lazarus-IDE nicht übersetzen !!!!

Jetzt ist die LCL ein ganz normales Pket (das war früher nicht so). D.h.jede einzelne Unit wird dann übersetzt, wenn sie beim Erstellen eines User-Programms gebraucht wird

Zum Cross-Compilieren brauchst Du also "Lazarus kompilieren" nicht. Und "Lazarus kompilieren einrichten ..." nützt dafür garnichts. Alle Einstellungen zum Erstellen/Übersetzen eines Projektes (Compiler, Widget-Typ, ...) sind in den Projekt-Optionen.

willi4willi hat geschrieben:ein Programm am PC zu entwickeln für Linux, Windows und den Raspberri Pi. Das Programm für Zielplattform übersetzen, hinkopieren --> läuft.


Das sollte gehen, indem zum Übersetzen jeweils die Projekt-Optionen geändert werden. Ich glaube beim neusten Lazarus aus dem svn Repository kann man die Projekt-Optionen auch abspeichern und laden....

-Michael

Benutzeravatar
willi4willi
Lazarusforum e. V.
Beiträge: 155
Registriert: Sa 1. Nov 2008, 18:06
OS, Lazarus, FPC: Windows, Linux (debian) / Lazarus 3.2 / FPC 3.2.2
CPU-Target: i386, win64, arm

Re: Cross compile - Linker findet nicht

Beitrag von willi4willi »

Hallo allerseits!

Jetzt habe ich es hinbekommen. Zwar konnte ich das oben geschilderte Problem nicht lösen, aber eine Neuinstallation dieser Lösung

http://www.pilotlogic.com

brachte mich zum Ziel.

Das ist eine tolle Lösung. Einfach zu installieren und (bis auf einige kleine Macken) fast alles ist dabei, was man braucht (oder auch nicht braucht :wink: ).

Danke allen!

Viele Grüße

Willi4Willi
 

Viele Grüße

Willi4Willi

------------

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: Cross compile - Linker findet nicht

Beitrag von Christian »

Ich kann das n stück weit schon verstehen, ich habs auch noch ned hinbekommen mit dem foc 2.6.0 oder 2.6.1 nen win32/64 crosscompiler von linux aus zu erstellen. bzw der compiler ist erstellbar funktioniert mit lazarus aber nicht mehr. Früher gabs auch mal noch fertige pakete dafür, aber auf aktuellen versionen nicht mehr.
Ich denke es wäre schick wenn in den Snapshots auch die crosscompiler mit gebaut wären.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Antworten