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:
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
Make và cài đặt binutils-2,22
make all-gcc
vàmake 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
đ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
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?
@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
Xin lỗi, tôi đã đọc sai. –
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ự. –