Forum: Compiler & IDEs Anfängerprobleme GCC-Linker CrossCompilation für ARM


von Chris B. (fhgsk)


Lesenswert?

Hallo,
beschäftige mich gerade mit dem Einrichten eines ARM-Linux Boards TX28S 
von Karo Electronics, das mit vorinstalliertem Linux kommt. Eine 
Toolchain zum Cross-Compilieren ist auch dabei und funktioniert auf dem 
Host auch wunderbar mit Programmen die keine besonderen Header Dateien 
brauchen.

Bin Anfänger mit GCC und jetzt etwas ratlos denn das selbstgeschriebene 
Programm, das ich da drauf machen will benutzt sqlite3 und so krieg ich 
da jetzt logischerweise eine Fehlermeldung dass er die Headerdatei nicht 
findet.
Wenn ich sie mit –Isqlite-amalgamation-3080002 dazu linke wird trotzdem 
angezeigt, dass er die die Funktionen sqlite3_close, sqlite3_exec usw. 
nicht findet. Was muss ich noch an Optionen eingeben? Compilerzeile ist: 
arm-926ejs-linux-gnueabi-gcc –o executable eingabedatei.c 
–Isqlite-amalgamation-3080002(da liegt der sqlite quellcode und die 
headerdatei) –L/usr/local/arm/sqhier/lib(ordner mit den libraries 
libsqlite3.a/.la/.so)

Bin vor allem verwirrt wegen der verschiedenen Dateien: Was machen die 
Header-Dateien (sqlite3.h) im Ordner include? Brauche ich noch die 
Librarydateien (libsqlite3.a/.la/.so) im Ordner lib auf dem Target? Und 
dann ist da noch die sqlite3 Binary im Ordner bin.
Hieran hab ich mich orientiert: 
http://openbook.galileocomputing.de/linux/linux_kap30_001.html#dodtp8105013f-285a-4f07-b741-29139de1bde8

Ist wahrscheinlich so verdammt einfach, dass es nirgends steht aber ich 
verzweifel trotzdem dran -.-   wie muss meine compilerzeile aussehen?
Danke für eure Hilfe
LG

von netseal (Gast)


Lesenswert?

Hallo,

häng mal -Lsqlite3 mit an die Argumente. Jetzt wird dynamisch verlinkt. 
D.h. die lib mus auch auf dem Zielsystem installiert sein.

von Chris B. (fhgsk)


Lesenswert?

ändert leider nichts, bekomme immernoch den den gleichen Fehler 
undefined reference to 'sqlite3_close' usw.

Auf dem Zielsystem ist sqlite3 installiert, aber auf dem Host wo ich die 
Kompilierung ausführe nicht. Und selbst wenn, dann wäre es ja für eine 
andere Prozessorarchitektur?

von netseal (Gast)


Lesenswert?

Ja, das geht nicht. Du musst die Bibliothek schon auf dem Host mit dem 
Cross-Compiler compilieren und installieren.

von Chris B. (fhgsk)


Lesenswert?

Das Cross-Compilierte sqlite liegt komplett im Ordner 
/usr/local/arm/sqhier mit den Unterordnern bin(enthält die ausführbare 
sqlite Datei), include(enthält sqlite3.h), lib(enthält die libraries) 
und share(ist nur die man drin). Das alles hab ich dann auf das Target 
kopiert. Hab auch versucht mit –L/usr/local/arm/sqhier/lib gegen die 
Libs in diesem Ordner zu linken.

von netseal (Gast)


Lesenswert?

Was hast du wohin kopiert? Ich versteh nur Bahnhof! Host oder Embedded?

von PittyJ (Gast)


Lesenswert?

Ich mache hier so etwas ähnliches, cross-compiliere mit Ziel ARM auf 
einem Intel-Linux.

Bei Linken muss ich dann den Pfad zu der ARM-Bibliothek mit angeben. 
Diese Bibliothek muss dabei auch physikalisch auf dem Intel-System 
liegen

Liegt also meine Bibliothek libxx.so unter /data/arm, dann muss ich 
angeben

arm-gcc .... -L/data/arm -lxx

Das hat bisher gut funktioniert.

von Chris B. (fhgsk)


Lesenswert?

Hab sqlite auf dem Host Cross-Compiliert und in einen Ordner schmeißen 
lassen und den dann auf das Target kopiert.
Der Ordner liegt auch noch auf dem Host und zwar in 
/usr/local/arm/sqhier. Hab versucht dagegen zu linken. Das arm im Pfad 
ist etwas irreführend, aber das läuft alles auf dem Host ab, nur dass 
ich ausführbare Dateien für das ARM Target haben will, die ich dann 
später rüberkopieren will.

von netseal (Gast)


Lesenswert?

Poste mal den Linker output.

von Chris B. (fhgsk)


Lesenswert?

Jetzt hat es kompliert, Vielen Dank für eure Hilfe. :)
Werde noch ein bisschen rumspielen, beim Ausführen auf dem Target 
bekomme ich einen segmentation fault. Sind wohl noch Fehler im Programm 
drin...

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.