2012-08-09 36 views
6

Tôi muốn biên dịch các tệp nhị phân cho máy chủ Linux từ hệ điều hành OS X 10.7 + Eclipse. Điều này có nghĩa là một trình biên dịch chéo GCC. Tôi bắt đầu từ bản gốc 4.7.1 và quay cho một máy chủ 4.7.1.Cross-biên dịch sang Linux từ OS X

Hướng dẫn trực tuyến nhất là dành riêng cho phát triển được nhúng. Tôi muốn sử dụng libstdC++ - v3 và glibc, làm cho nó hơi khác một chút.

gì thành công:

  1. Cài đặt gói

    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. Make và cài đặt binutils-2,22

  3. make all-gccmake install-gcc

    sử dụng các cấu hình sau:

    $ ../gcc/configure --enable-languages ​​= c, C++, objc, obj-C++ --with-gmp =/opt/local --with-mpfr =/opt/local - với-mpc =/opt/local --prefix =/usr/local/chéo/linux --target = x86_64-pc-linux-gnu --disable-nls

  4. điểm xây dựng môi trường tại ngã -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. Build glibc-2.16 bằng cách sử dụng cấu hình

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

Sự thất bại:

glibc xây dựng thất bại trước khi dài. Thông báo này xuất hiện nhiều lần:

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. 

Điều này có thể bình thường.

Sau đó, nó không sản xuất được stdio_lim.h. Với make -d, tôi có được điều này:

  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. 

Đây là tiêu đề đầu tiên nó cố gắng xây dựng trong bits. Có một tệp stdio_lim.h.in, chỉ là tệp .in trong thư mục của nó. Một số quy tắc có nên kết nối .st với .in không?

+0

@DietrichEpp Bạn có thể làm rõ? Tại sao bất kỳ trình biên dịch chéo yêu cầu bất cứ điều gì từ hệ điều hành máy chủ? Có một cái gì đó rất cá về nguyên tắc về toàn bộ toolchain. Đây có phải là vấn đề dàn dựng không? Giống như cố gắng sử dụng thư viện Linux trên nền tảng gốc để đi từ giai đoạn 2 đến giai đoạn 3? – Potatoswatter

+0

Xin lỗi, tôi đã đọc sai. –

+0

Dường như nó sẽ giúp bạn tiết kiệm một vài ngày trong cuộc sống của bạn để chỉ cần cài đặt một máy ảo. Cross-biên dịch là một con gấu thực sự. –

Trả lời

1

Để xây dựng đúng glibc, bạn cần các tệp tiêu đề từ một hệ thống Linux - có lẽ các tiêu đề hạt nhân là đủ.

Điều này là do thực tế rằng các tiêu đề đó là cần thiết trong bất kỳ xây dựng phần mềm thông thường nào cho hệ thống đó và cũng không giống nhau khi biên dịch chéo.

Đã lâu rồi kể từ khi tôi tạo các trình biên dịch chéo, vì vậy tôi không thể cho bạn biết cách xây dựng glibc để xem các tiêu đề, nhưng tôi tin rằng nó có thể được thực hiện theo cách thẳng thắn .

+0

Cảm ơn, tôi có thể xem lại sớm để xác minh câu trả lời này. – Potatoswatter

+0

Bạn đã được giải quyết chưa? – ash

+0

Xin lỗi, đã không nhận được xung quanh nó. Tại thời điểm này tôi không sử dụng Linux cho bất cứ điều gì. Tôi hy vọng sẽ trong vòng vài tháng tới. – Potatoswatter