2013-03-05 17 views
5

Mam problem z krzyżową kompilacją biblioteki dla mojej tablicy układów sterowania za pomocą Autconf.Kompilacja krzyżowa dla ARM z Autoconf

używam tej linii:

./configure --target=arm-linux --host=arm-linux --prefix=/bla/bla/bla/linux_arm_tool CFLAGS='-m32' 
make 
make install 

Kiedy zrobić file to sprawdzić uzyskać:

libjpeg.so.8.4.0: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, not stripped 

To nie wydaje się słuszne w ogóle, ale próbowałem go używać w każdym razie. .. a ja się:

/usr/lib/gcc/arm-linux-gnueabi/4.5.3/../../../../arm-linux-gnueabi/bin/ld: skipping incompatible /bla/bla/bla/bla/../linux_arm_tool/lib/libjpeg.so when searching for -ljpeg 

jestem w rozterce, byłem googlowania na godzinę teraz ...

Odpowiedz

12

Wiedziałem więc ja krzyż skompilowane przed użyciem naprawdę podstawowe wywołań metod i zorientowali się, dlaczego stałam precz z tym wcześniej po zbadaniu wyjście:

checking for arm-linux-gnueabi-gcc... no 
checking for gcc... gcc 
... 
... 
checking for arm-linux-gnueabi-gcc... gcc 

W moim /usr/bin nie było arm-linux-gnueabi-gcc, musiałem:

ln -s /usr/bin/arm-linux-gnueabi-gcc-4.5 /usr/bin/arm-linux-gnueabi-gcc 

pomyślnie cross-skompilowany przy użyciu:

./configure --host=arm-linux-gnueabi -prefix=${CSTOOL_DIR}/linux_arm_tool 

za powiązanie ... Muszę jeszcze sprawdzić kilka rzeczy, ale mam zamiar założyć, może muszę rzucać jakieś -rpath-link flagi w bardziej zaawansowanych kompilacji.

+1

Nie mam nawet "/usr/bin/arm-linux-gnueabi-gcc-4.5"! Ale zainstalowałem go przez "apt-get install gcc-arm-linux-gnueabi" –

3

Musisz zastąpić zmienne środowiskowe CC, LD i inne istotne. Ustawienie tych przełączników nie powiedzieć, gdzie łańcuch skonfigurować narzędzie krzyż jest (to może być wszędzie)

Sprawdź niektóre przewodniki dla różnych projektów, na przykład: http://wiki.wxwidgets.org/Cross-Compiling_Under_Linux

Również tutaj jest skrypt zrobiłem do konfiguracja krzyż kompilacji dla node.js - sam pomysł: https://gist.github.com/edhemphill/5094239

libjpeg nie zadziała b/c jest to binarny x86, trzeba powiedzieć:

ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.26, not stripped 

lub podobny.

To jest powód, dla którego są coraz skipping incompatible

+0

Tak to ma sens, i spodziewać się wiele. Po prostu nie mogłem się zorientować, gdzie kompilacja idzie źle. Do czego służy flaga --target, jeśli nie używa automatycznie poprawnych kompilatorów i łączników? – Constantin

+2

Tak długo, jak nie budujesz kompilatora (patrząc na 'libjpeg.so' wspomniałem, że nie sądzę) flaga' --target' i tak nie będzie użyta. '--target' określa architekturę komputera, dla którego stworzony plik binarny wygeneruje wynik. Tak więc asembler zbudowany na komputerze A, który później działa na komputerze B, aby złożyć kod dla maszyny C, użyłby: --buid = A --host = B --target = C. Jeśli wygenerowany plik binarny nie generuje żadnego kodu, flaga '--target' nie wprowadza żadnych zmian. – mikyra

+0

Więc mam raczej ustawić cały plik Makefile za pomocą zmiennych środowiskowych, aż do flag łącznika, takich jak '-rlink-path'? – Constantin

5

Myślę, że problem można przekształcić bardziej ogólnie jak: "Jak używać Autoconf do krzyżowania kompilacji dla ARM?"

Według ./configure -h:

System types: 
    --build=BUILD  configure for building on BUILD [guessed] 
    --host=HOST  cross-compile to build programs to run on HOST [BUILD] 

Oficjalna dokumentacja GNU jest pomocne w odpowiedzi na to pytanie:

http://www.gnu.org/software/autoconf/manual/autoconf-2.67/html_node/Hosts-and-Cross_002dCompilation.html

Uwaga gdy określającą wykorzystanie --host i i --build:

Therefore, whenever you specify --host, be sure to specify --build too. 

I tutaj jest przykładem, że po prostu służy do konfigurowania iperf dla mojego wbudowanego platformy ARM:

Przede wszystkim „./configure” skryptu jest faktycznie nazywa się «Autoconf», który naprawdę pomaga na google-ing. Chodzi o to, aby:

  • miec kompilatory krzyż w bieżącym $ PATH
  • Ustaw CC i zmienne środowisko CXX wskazać na krzyż kompilatory
  • dają prawo --host i - -build

    buildpath <--- my little script to setup my $PATH 
    export CC=arm_v5t_le-gcc 
    export CXX=arm_v5t_le-g++ 
    ./configure --host=armv5tl-montavista-linux-gnueabi --build=x86_64-linux-gnu 
    
Powiązane problemy