OS X 10.7 + Eclipse 빌드 시스템에서 Linux 서버용 바이너리를 컴파일하려고합니다. 이것은 GCC 크로스 컴파일러를 의미합니다. 나는 네이티브 4.7.1에서 시작하여 호스트 4.7.1에서 촬영하고있다.OS X에서 Linux로 크로스 컴파일
대부분의 온라인 지침은 임베디드 개발에만 적용됩니다. 나는 libstdC++ - v3과 glibc를 사용하고 싶다.
어떻게 성공 :
패키지
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
만들기를 설치하고 설치의 binutils-2.22
make all-gcc
다음과 같은 설정을 사용make install-gcc
:
$ ../gcc/configure --enable-languages = c, C++, objc, obj-C++ --with-gmp =/opt/local --with-mpfr =/opt/local - 와-MPC 십자가에서 =/옵션/지역 --prefix =/usr/지방/간/리눅스 --target = x86_64에-PC-리눅스 GNU --disable-NLS
포인트 빌드 환경 는 config
0을 사용
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
빌드의 glibc-2.16 -compiler
../glibc/configure --host = x86_64-pc-linux-gnu --build = x86_64-apple-darwin11 --prefix =/usr/local/cross/linux/--with-binutils =/usr/
: 지역/크로스/리눅스/빈/--with-헤더 =/usr/지방/간/리눅스// libc_cv_forced_unwind = 예 libc_cv_ctors_header = 예 = libc_cv_c_cleanup 예
실패 포함 glibc 빌드가 오래 전에 실패합니다. 이 메시지는 여러 번 나타납니다 :
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.
이것은 정상적인 현상 일 수 있습니다.
그런 다음 stdio_lim.h
을 생성하지 못합니다. make -d
으로,이 얻을 :
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.
이것은 bits
구축을 시도 최초의 헤더입니다. 파일에 stdio_lim.h.in
이 있으며, 해당 디렉토리에 파일은 .in
뿐입니다. 어떤 규칙에 .st
을 .in
에 연결해야합니까?
@DietrichEpp 명확하게 할 수 있습니까? 어떤 교차 컴파일러가 호스트 OS에서 어떤 것을 요구해야합니까? 원칙적으로 전체 툴체인에 대해 뭔가 비린내가 있습니다. 스테이징 문제입니까? 네이티브 플랫폼에서 리눅스 라이브러리를 사용하여 2 단계에서 3 단계로 이동하는 것처럼? – Potatoswatter
죄송합니다, 잘못 읽었습니다. –
며칠 동안 VM을 설치하기 만하면됩니다. 크로스 컴파일은 진짜 곰입니다. –