ljmarkus
Anmeldungsdatum: 30. Juni 2008
Beiträge: 43
|
Hallo. Beim Crosscompile habe ich ein Problem und benötige Hilfe dabei. Makefile
#CC_LINUX = gcc
CC_LINUX = arm-linux-gnueabi-gcc
WARN = -Wall
CFLAGS = -std=gnu99 -lpthread -lrt
LFLAGS = -lstdc++ -lSDL_ttf
LIBS = -lSDL
TARGET = sdltest
SRC = src/main.c
SRC += src/network_tools.c
SRC += src/window.c
SRC += src/encoder.c
SRC += src/display.c
#CFLAGS = -std=gnu99 -m32 -lpthread
all: build_all
build_all:
$(CC_LINUX) `sdl-config --cflags` `sdl-config --libs` $(SRC) -o $(TARGET) $(CFLAGS) $(LFLAGS) $(LIBS) Fehlermeldung:
make
arm-linux-gnueabi-gcc `sdl-config --cflags` `sdl-config --libs` src/main.c src/network_tools.c src/window.c src/encoder.c src/display.c -o sdltest -std=gnu99 -lpthread -lrt -lstdc++ -lSDL_ttf -lSDL
/usr/lib/gcc-cross/arm-linux-gnueabi/5/../../../../arm-linux-gnueabi/bin/ld: Inkompatible /usr/lib/i386-linux-gnu/libSDL.so wird übersprungen bei der Suche nach -lSDL
/usr/lib/gcc-cross/arm-linux-gnueabi/5/../../../../arm-linux-gnueabi/bin/ld: Inkompatible /usr/lib/i386-linux-gnu/libSDL.a wird übersprungen bei der Suche nach -lSDL
/usr/lib/gcc-cross/arm-linux-gnueabi/5/../../../../arm-linux-gnueabi/bin/ld: cannot find -lSDL
/usr/lib/gcc-cross/arm-linux-gnueabi/5/../../../../arm-linux-gnueabi/bin/ld: Inkompatible /usr/lib/i386-linux-gnu/libpthread.so wird übersprungen bei der Suche nach -lpthread
/usr/lib/gcc-cross/arm-linux-gnueabi/5/../../../../arm-linux-gnueabi/bin/ld: Inkompatible /usr/lib/i386-linux-gnu/libpthread.a wird übersprungen bei der Suche nach -lpthread
collect2: error: ld returned 1 exit status
Makefile:25: die Regel für Ziel „build_all“ scheiterte
make: *** [build_all] Fehler 1 Mein Zeilsystem ist eine ARM Cpu. http://www.acmesystems.it/aria Wenn ich es auf dem Zeilsystem erstelle dann läuft der Compiler ohne Fehler durch nur dauert es halt sehr lange immer. Crosscompile System ist Ubuntu 16.04 mini Hoffe Ihr könnt mir helfen. Danke, Markus
|
lubux
Anmeldungsdatum: 21. November 2012
Beiträge: 14382
|
ljmarkus schrieb: Wenn ich es auf dem Zeilsystem erstelle dann läuft der Compiler ohne Fehler durch nur dauert es halt sehr lange immer. Crosscompile System ist Ubuntu 16.04 mini
Wenn Du für die build time (crosscompilierung), libraries und andere Dateien benötigst, dann müssen diese auch deinem Zielsystem (arm) und nicht dem crosscompile-System (i386-linux-gnu) entsprechen bzw. entnommen sein.
|
ljmarkus
(Themenstarter)
Anmeldungsdatum: 30. Juni 2008
Beiträge: 43
|
also sollte ich folgende Dateien vom ARM System auf die build time kopieren: libSDL.so
libSDL.a
libpthread.so
libpthread.a und wo soll ich die dann ablegen? Danke,
Markus
|
lubux
Anmeldungsdatum: 21. November 2012
Beiträge: 14382
|
ljmarkus schrieb: also sollte ich folgende Dateien vom ARM System auf die build time kopieren:
BTW: Statt kopieren könntest Du evtl. auch den Datenträger mounten oder das Dateisystem per sshfs einbinden. ljmarkus schrieb: und wo soll ich die dann ablegen?
Den Pfad für diese Dateien kannst Du dann im Makefile, dem Compiler/Linker mitteilen.
|
ljmarkus
(Themenstarter)
Anmeldungsdatum: 30. Juni 2008
Beiträge: 43
|
wie gebe ich den dem Makefile das bekannt wo ich die Datei oder das Dateisystem kopiert / eingehängt habe? Danke, Markus
|
lubux
Anmeldungsdatum: 21. November 2012
Beiträge: 14382
|
ljmarkus schrieb: wie gebe ich den dem Makefile das bekannt wo ich die Datei oder das Dateisystem kopiert / eingehängt habe?
Z. B. mit:
LFLAGS= -L<path/dir>
|
ljmarkus
(Themenstarter)
Anmeldungsdatum: 30. Juni 2008
Beiträge: 43
|
so habe nun das Dateisystem nach /media/ariag25 eingehängt. im Makefile:
LFLAGS = -L/media/ariag25 -lstdc++ -lSDL_ttf eingetragen. Aber leider immer noch das gleiche......
|
lubux
Anmeldungsdatum: 21. November 2012
Beiträge: 14382
|
ljmarkus schrieb: Aber leider immer noch das gleiche......
Poste mal jetzt, das geänderte Makefile und die Fehlermeldung.
|
ljmarkus
(Themenstarter)
Anmeldungsdatum: 30. Juni 2008
Beiträge: 43
|
Moin Makefile
#CC_LINUX = gcc
CC_LINUX = arm-linux-gnueabi-gcc
WARN = -Wall
CFLAGS = -std=gnu99 -lpthread -lrt
LFLAGS = -L/media/ariag25 -lstdc++ -lSDL_ttf
LIBS = -lSDL
TARGET = sdltest
SRC = src/main.c
SRC += src/network_tools.c
SRC += src/window.c
SRC += src/encoder.c
SRC += src/display.c
#CFLAGS = -std=gnu99 -m32 -lpthread
all: build_all
build_all:
$(CC_LINUX) `sdl-config --cflags` `sdl-config --libs` $(SRC) -o $(TARGET) $(CFLAGS) $(LFLAGS) $(LIBS) Output:
make
arm-linux-gnueabi-gcc `sdl-config --cflags` `sdl-config --libs` src/main.c src/network_tools.c src/window.c src/encoder.c src/display.c -o sdltest -std=gnu99 -lpthread -lrt -L/media/ariag25 -lstdc++ -lSDL_ttf -lSDL
/usr/lib/gcc-cross/arm-linux-gnueabi/5/../../../../arm-linux-gnueabi/bin/ld: Inkompatible /usr/lib/i386-linux-gnu/libSDL.so wird übersprungen bei der Suche nach -lSDL
/usr/lib/gcc-cross/arm-linux-gnueabi/5/../../../../arm-linux-gnueabi/bin/ld: Inkompatible /usr/lib/i386-linux-gnu/libSDL.a wird übersprungen bei der Suche nach -lSDL
/usr/lib/gcc-cross/arm-linux-gnueabi/5/../../../../arm-linux-gnueabi/bin/ld: Inkompatible /usr/lib/i386-linux-gnu/libpthread.so wird übersprungen bei der Suche nach -lpthread
/usr/lib/gcc-cross/arm-linux-gnueabi/5/../../../../arm-linux-gnueabi/bin/ld: Inkompatible /usr/lib/i386-linux-gnu/libpthread.a wird übersprungen bei der Suche nach -lpthread
/usr/lib/gcc-cross/arm-linux-gnueabi/5/../../../../arm-linux-gnueabi/bin/ld: cannot find /lib/arm-linux-gnueabi/libpthread.so.0
/usr/lib/gcc-cross/arm-linux-gnueabi/5/../../../../arm-linux-gnueabi/bin/ld: cannot find /usr/lib/arm-linux-gnueabi/libpthread_nonshared.a
collect2: error: ld returned 1 exit status
Makefile:25: die Regel für Ziel „build_all“ scheiterte
make: *** [build_all] Fehler 1
|
lubux
Anmeldungsdatum: 21. November 2012
Beiträge: 14382
|
ljmarkus schrieb: build_all:
$(CC_LINUX) `sdl-config --cflags` `sdl-config --libs` $(SRC) -o $(TARGET) $(CFLAGS) $(LFLAGS) $(LIBS)
Mit "sdl-config --cflags sdl-config --libs " weist Du auf die libSDL des build-Systems und nicht auf die des Ziel-Systems. BTW: "-l<x>"'s müssen nach "-L<path/dir>" kommen.
|
ljmarkus
(Themenstarter)
Anmeldungsdatum: 30. Juni 2008
Beiträge: 43
|
Verwirrt... Könntest Du mir das Makefile schreiben so wie es sein sollte? Danke, Markus
|
track
Anmeldungsdatum: 26. Juni 2008
Beiträge: 7174
Wohnort: Wolfen (S-A)
|
ljmarkus schrieb: build_all:
$(CC_LINUX) `sdl-config --cflags` `sdl-config --libs` $(SRC) -o $(TARGET) $(CFLAGS) $(LFLAGS) $(LIBS)
Moment mal ... In dieser Zeile stehen doch Backticks ! - ist das tatsächlich so gewollt ? Mit Makefiles kenne ich mich nun nicht wirklich aus, aber das wären ja wohl Command Substitutions. Nur so, weil es mir auffiel, und komisch vorkam ... LG und einen guten Rutsch, track
|
barcc
Anmeldungsdatum: 13. Juli 2007
Beiträge: 696
Wohnort: Dortmund
|
Ubuntu und Debian besitzen eigentlich eine gute Unterstützung fürs Cross-Compilieren. Dazu fügt man mit
dpkg --add-architecture armhf
armhf als "foreign architecture" hinzu. Dann kann man die benötigten *-dev:armhf-Pakete installieren. Der Cross-Compiler sollte dann die libs für armhf eigentlich selbst finden. Nach meiner Erfahrung kanns beim Installieren von armhf-Pakete passieren, dass Abhängigkeiten falsch aufgelöst werden und dann vorgeschlagen wird, Pakete deiner nativen Architektur zu entfernen. Dann muss man die Abhängigkeiten selbst auflösen.
|
Dakuan
Anmeldungsdatum: 2. November 2004
Beiträge: 6509
Wohnort: Hamburg
|
In dieser Zeile stehen doch Backticks ! - ist das tatsächlich so gewollt ?
Ich denke schon. Bei SDL und FLTK ist das wohl üblich, wobei es nicht unbedingt die alten Backticks sein müssen. Was mir aber auffällt, ist dass die direkt in der Zeile mit dem Compiler Aufruf stehen, anstatt die Variablen zu benutzen. ...
CFLAGS = -std=gnu99 -lpthread -lrt
...
$(CC_LINUX) `sdl-config --cflags` `sdl-config --libs` $(SRC) -o $(TARGET) $(CFLAGS) $(LFLAGS) $(LIBS)
Ich bin mir nicht sicher, ob das so zusammenpasst. Werden die Flags da überschrieben oder addiert?
|
lubux
Anmeldungsdatum: 21. November 2012
Beiträge: 14382
|
ljmarkus schrieb: LFLAGS = -L/media/ariag25 -lstdc++ -lSDL_ttf
Wie ist die Ausgabe von:
ls -la /media/ariag25
?
|