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
Hallo, häng mal -Lsqlite3 mit an die Argumente. Jetzt wird dynamisch verlinkt. D.h. die lib mus auch auf dem Zielsystem installiert sein.
ä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?
Ja, das geht nicht. Du musst die Bibliothek schon auf dem Host mit dem Cross-Compiler compilieren und installieren.
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.
Was hast du wohin kopiert? Ich versteh nur Bahnhof! Host oder Embedded?
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.