2012-08-09 15 views
6

Chcę skompilować pliki binarne dla serwera Linux z systemu kompilacji OS X 10.7 + Eclipse. Oznacza to krzyżowy kompilator GCC. Zaczynam od natywnego 4.7.1 i strzelam do gospodarza 4.7.1.Kompilacja krzyżowa do systemu Linux z OS X

Większość instrukcji online dotyczy oprogramowania wbudowanego. Chcę użyć libstdC++ - v3 i glibc, które sprawiają, że jest trochę inny.

Co powiedzie:

  1. Instalacja pakietów

    port install gcc47 
    export CC=gcc-mp-47 
    export LD=ld-mp-47 
    export CXX=g++-mp-47 
    export CPP=cpp-mp-47 
    
    port install gmake 
    ln /opt/local/bin/gmake /opt/local/bin/make 
    
    port install gsed 
    ln /opt/local/bin/gsed /opt/local/bin/sed 
    
    port install gawk 
    port install autoconf 
    port install msgfmt 
    
  2. Marka i zainstalować binutils-2,22

  3. make all-gcc i make install-gcc

    zastosowano następujące config:

    $ ../gcc/configure --enable-languages ​​= c, C++, objc, obj-C++ --with-gmp =/opt/local --with-mpfr =/opt/local - z-MPC =/opt/local prefix =/usr/local/cross/linux --target = x86_64-pc-linux-gnu --disable-nls

  4. Punkt środowisko kompilacji pod krzyżem -compiler

    export CC=/usr/local/cross/linux/bin/x86_64-pc-linux-gnu-gcc 
    export LD=/usr/local/cross/linux/bin/x86_64-pc-linux-gnu-ld 
    export AR=/usr/local/cross/linux/bin/x86_64-pc-linux-gnu-ar 
    export CXX=/usr/local/cross/linux/bin/x86_64-pc-linux-gnu-g++ 
    export CPP=/usr/local/cross/linux/bin/x86_64-pc-linux-gnu-cpp 
    
  5. budowy glibc-2.16 stosując config

    ../glibc/configure --host = x86_64-pc-linux-gnu - build = x86_64-apple-darwin11 --prefix =/usr/local/cross/linux/--with-binutils =/usr/local/cross/linux/bin/--with-headers =/usr/local/cross/linux/include/libc_cv_forced_unwind = yes libc_cv_ctors_header = yes libc_cv_c_cleanup = yes

niepowodzenie:

Kompilacja glibc kończy się niepowodzeniem. Ten komunikat pojawia się wiele razy:

In file included from ./sysdeps/unix/sysdep.h:20:0, 
       from ./sysdeps/unix/x86_64/sysdep.h:18, 
       from sysdeps/unix/sysv/linux/x86_64/sysdep.h:22, 
       from <stdin>:1: 
sysdeps/unix/sysv/linux/sys/syscall.h:24:24: fatal error: asm/unistd.h: No such file or directory 
compilation terminated. 

Może to być jednak normalne.

Następnie nie można uzyskać stdio_lim.h. Z make -d, otrzymuję to:

  Successfully remade target file `/Users/dkrauss/Documents/work/glibc-build/csu/abi-tag.h'. 
      Considering target file `/Users/dkrauss/Documents/work/glibc-build/bits/stdio_lim.h'. 
      File `/Users/dkrauss/Documents/work/glibc-build/bits/stdio_lim.h' does not exist. 
      Looking for an implicit rule for `/Users/dkrauss/Documents/work/glibc-build/bits/stdio_lim.h'. 
      Trying pattern rule with stem `lim'. 
      Trying implicit prerequisite `/Users/dkrauss/Documents/work/glibc-build/bits/stdio_lim.st'. 
      Found an implicit rule for `/Users/dkrauss/Documents/work/glibc-build/bits/stdio_lim.h'. 
      Considering target file `/Users/dkrauss/Documents/work/glibc-build/bits/stdio_lim.st'. 
      Recently tried and failed to update file `/Users/dkrauss/Documents/work/glibc-build/bits/stdio_lim.st'. 
make[2]: *** No rule to make target `/Users/dkrauss/Documents/work/glibc-build/bits/stdio_lim.st', needed by `/Users/dkrauss/Documents/work/glibc-build/bits/stdio_lim.h'. Stop. 

To pierwszy nagłówek próbuje budować w bits. Jest plik stdio_lim.h.in, który jest jedynym plikiem .in w swoim katalogu. Czy jakaś reguła powinna łączyć się z .st na .in?

+0

@DietrichEpp Czy możesz wyjaśnić? Dlaczego każdy krzyżowy kompilator potrzebuje czegokolwiek z hosta? Zasadniczo jest coś bardzo podejrzanego w całym łańcuchu narzędzi. Czy to jest kwestia inscenizacji? Jak próba użycia bibliotek Linuksa na rodzimej platformie, aby przejść od etapu 2 do etapu 3? – Potatoswatter

+0

Przepraszam, przeczytałem źle. –

+0

Wygląda na to, że zaoszczędzisz kilka dni swojego życia, aby zainstalować maszynę wirtualną. Kompilacja krzyżowa to prawdziwy niedźwiedź. –

Odpowiedz

1

Aby poprawnie zbudować glibc, potrzebujesz plików nagłówkowych z systemu Linux - prawdopodobnie nagłówki jądra są wystarczające.

Wynika to z faktu, że te nagłówki są potrzebne przy normalnej kompilacji oprogramowania dla tego systemu, a to samo nie ma znaczenia podczas kompilacji skrośnej.

Minęło dużo czasu, odkąd pracowałem nad tworzeniem kompilatorów krzyżowych, więc nie mogę powiedzieć, jak uzyskać kompilację glibc, aby zobaczyć nagłówki, ale uważam, że można to zrobić w prosty sposób .

+0

Dzięki, mogę powtórzyć to wkrótce, aby zweryfikować tę odpowiedź. – Potatoswatter

+0

Czy rozwiązałeś problem? – ash

+0

Przepraszam, nie doszło do tego. W tej chwili nie używam Linuksa do niczego. Mam nadzieję, że w ciągu najbliższych kilku miesięcy. – Potatoswatter

Powiązane problemy