ubuntuusers.de

Crosscompile Problem

Status: Gelöst | Ubuntu-Version: Ubuntu 16.04 (Xenial Xerus)
Antworten |

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

Avatar von 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

Avatar von 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

Avatar von 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

?

Antworten |