나한테는 무엇보다도 휼용한 gcc cross 컴파일러를 사용할 수 있다는 것이 너무나도 좋다.
뭐 기본적인 컴파일러는 많은 곳에서 다운로드하여 사용할 수 있다.
그런데 뭔가 좀 하려다 보면 특정 라이브러리
예를 들면 freetype같은 폰트 라이브러리 같은 것을 쓰려다 보면
해당 소스코드를 다운로드하고 내가 가지고 있는 컴파일러에 맞게
configure와 Makefile 수정을 하고 컴파일하고
컴파일이 완료된 Library와 include 파일들을 복사하는 과정을 거쳐야 한다.
이것이 끝이 아니라 버그 수정이나 버전 상승이 발생하면 위의 모든 과정을 다시 거쳐야한다.
하지만, 여러분의 시스템이 데비안 시스템 혹은 데비안 호완 시스템이면
xapt라는 프로그램을 사용해서 이미 cross 컴파일된 패키지를 자동으로 관리해 준다.
이와 같은 것을 구현하려면 emdebian에서 제공하는
armel의 cross compiler와 라이브러리를 설치해야한다.
emdebian의 패키지를 받아 볼 수 있는 저장소는
아마도 여러분의 apt 소스 리스트에 없을 것이다.
- /etc/apt/source.list.d/emdebian.list
deb http://www.emdebian.org/debian/ testing main
그리고 하나 참고할 사항은 지금 작업하고 설정이 이루어지는 시스템은 jessie debian 임을 밝혀둔다.
그럼 emdebian의 인증키를 다운받아 설치하자.
# apt-get install emdebian-archive-keyring
# apt-get update
사전 설정은 어느정도 마무리 되었다.
그럼 현 시점에서 제공되고 있는 arm cross toolchain 패키지를 살펴보자.
# apt-cache search armel
asterisk-prompt-fr-armelle - French voice prompts for Asterisk by Armelle Desjardins
debian-installer-7.0-netboot-armel - Debian-installer network boot images for armel
installation-guide-armel - Debian installation guide for armel
icedtea-6-jre-cacao - Alternative JVM for OpenJDK, using Cacao
icedtea-6-jre-jamvm - Alternative JVM for OpenJDK, using JamVM
icedtea-7-jre-jamvm - Alternative JVM for OpenJDK, using JamVM
cpp-4.3-arm-linux-gnueabi - The GNU C preprocessor
cpp-4.4-arm-linux-gnueabi - GNU C preprocessor
cpp-4.5-arm-linux-gnueabi - The GNU C preprocessor
cpp-4.6-arm-linux-gnueabi - GNU C preprocessor
cpp-4.7-arm-linux-gnueabi - GNU C preprocessor
g++-4.3-arm-linux-gnueabi - The GNU C++ compiler
g++-4.4-arm-linux-gnueabi - GNU C++ compiler
g++-4.5-arm-linux-gnueabi - The GNU C++ compiler
g++-4.6-arm-linux-gnueabi - GNU C++ compiler
g++-4.7-arm-linux-gnueabi - GNU C++ compiler
gcc-4.3-arm-linux-gnueabi - The GNU C compiler
gcc-4.4-arm-linux-gnueabi - GNU C compiler
gcc-4.4-base-armel-cross - The GNU Compiler Collection (base package) (for cross-compiling)
gcc-4.5-arm-linux-gnueabi - The GNU C compiler
gcc-4.6-arm-linux-gnueabi - GNU C compiler
gcc-4.7-arm-linux-gnueabi - GNU C compiler
libc-bin-armel-cross - Embedded GNU C Library: Binaries (for cross-compiling)
libc-dev-bin-armel-cross - Embedded GNU C Library: Development binaries (for cross-compiling)
libc6-armel-cross - Embedded GNU C Library: Shared libraries (for cross-compiling)
libc6-dev-armel-cross - Embedded GNU C Library: Development Libraries and Header Files (for cross-compiling)
libgcc1-dbg-armel-cross - GCC support library (debug symbols)
libgfortran3-armel-cross - Runtime library for GNU Fortran applications
libgfortran3-dbg-armel-cross - Runtime library for GNU Fortran applications (debug symbols)
libgmp-dev-armel-cross - Multiprecision arithmetic library developers tools (for cross-compiling)
libgmp10-armel-cross - Multiprecision arithmetic library (for cross-compiling)
libgmp3-dev-armel-cross - Multiprecision arithmetic library developers tools (for cross-compiling)
libgmp3c2-armel-cross - Multiprecision arithmetic library (for cross-compiling)
libgmpxx4ldbl-armel-cross - Multiprecision arithmetic library (C++ bindings) (for cross-compiling)
libgo0-armel-cross - Runtime library for GNU Go applications
libgo0-dbg-armel-cross - Runtime library for GNU Go applications (debug symbols)
libgomp1-armel-cross - GCC OpenMP (GOMP) support library (for cross-compiling)
libgomp1-dbg-armel-cross - GCC OpenMP (GOMP) support library (debug symbols)
libmpfr-dev-armel-cross - multiple precision floating-point computation developers tools (for cross-compiling)
libmpfr1ldbl-armel-cross - multiple precision floating-point computation (for cross-compiling)
libmpfr4-armel-cross - multiple precision floating-point computation (for cross-compiling)
libmudflap0-4.4-dev-armel-cross - GCC mudflap support libraries (development files)
libmudflap0-4.5-dev-armel-cross - GCC mudflap support libraries (development files)
libmudflap0-4.6-dev-armel-cross - GCC mudflap support libraries (development files)
libmudflap0-4.7-dev-armel-cross - GCC mudflap support libraries (development files)
libmudflap0-armel-cross - GCC mudflap shared support libraries
libmudflap0-dbg-armel-cross - GCC mudflap shared support libraries (debug symbols)
libobjc2-armel-cross - Runtime library for GNU Objective-C applications
libobjc2-dbg-armel-cross - Runtime library for GNU Objective-C applications (debug symbols)
libobjc3-armel-cross - Runtime library for GNU Objective-C applications
libobjc3-dbg-armel-cross - Runtime library for GNU Objective-C applications (debug symbols)
libobjc4-armel-cross - Runtime library for GNU Objective-C applications
libobjc4-dbg-armel-cross - Runtime library for GNU Objective-C applications (debug symbols)
libstdc++6-4.3-dbg-armel-cross - The GNU Standard C++ Library v3 (debugging files)
libstdc++6-4.3-dev-armel-cross - The GNU Standard C++ Library v3 (development files)
libstdc++6-4.3-pic-armel-cross - The GNU Standard C++ Library v3 (shared library subset kit)
libstdc++6-4.4-dbg-armel-cross - GNU Standard C++ Library v3 (debugging files)
libstdc++6-4.4-dev-armel-cross - GNU Standard C++ Library v3 (development files)
libstdc++6-4.4-pic-armel-cross - GNU Standard C++ Library v3 (shared library subset kit)
libstdc++6-4.5-dbg-armel-cross - The GNU Standard C++ Library v3 (debugging files)
libstdc++6-4.5-dev-armel-cross - The GNU Standard C++ Library v3 (development files)
libstdc++6-4.5-pic-armel-cross - The GNU Standard C++ Library v3 (shared library subset kit)
libstdc++6-4.6-dbg-armel-cross - GNU Standard C++ Library v3 (debugging files)
libstdc++6-4.6-dev-armel-cross - GNU Standard C++ Library v3 (development files)
libstdc++6-4.6-pic-armel-cross - GNU Standard C++ Library v3 (shared library subset kit)
libstdc++6-4.7-dbg-armel-cross - GNU Standard C++ Library v3 (debugging files)
libstdc++6-4.7-dev-armel-cross - GNU Standard C++ Library v3 (development files)
libstdc++6-4.7-pic-armel-cross - GNU Standard C++ Library v3 (shared library subset kit)
libstdc++6-armel-cross - GNU Standard C++ Library v3 (for cross-compiling)
linux-libc-dev-armel-cross - Linux support headers for userspace development (for cross-compiling)
tzdata-armel-cross - time zone and daylight-saving time data (for cross-compiling)
zlib1g-armel-cross - compression library - runtime (for cross-compiling)
zlib1g-dev-armel-cross - compression library - development (for cross-compiling)
gcc-4.8-base-armel-cross - GCC, the GNU Compiler Collection (base package) (for cross-compiling)
libgcc1-armel-cross - GCC support library (for cross-compiling)
multiarch-support-armel-cross - Transitional package to ensure multiarch compatibility (for cross-compiling)
libpng12-0-armel-cross - PNG library - runtime (for cross-compiling)
위의 리스트에서 필요한 것들은
linux-libc-dev-armel-cross,
libc6-armel-cross libc6-dev-armel-cross,
binutils-arm-linux-gnueabi,
gcc-4.7-arm-linux-gnueabi,
g++-4.7-arm-linux-gnueabi
등이다. 하지만, 다음과 같이 뭔가 버전 문제가 발생한다.
# apt-get install libc6-dev-armel-cross
패키지 목록을 읽는 중입니다... 완료
의존성 트리를 만드는 중입니다
상태 정보를 읽는 중입니다... 완료
몇몇 패키지를 설치할 수 없습니다. 요청한 상황이 불가능할 수도 있고,
불안정 배포판을 사용해서 일부 필요한 패키지를 아직 만들지 않았거나,
아직 Incoming에서 나오지 않은 경우일 수도 있습니다.
이 상황을 해결하는데 다음 정보가 도움이 될 수도 있습니다:
다음 패키지의 의존성이 맞지 않습니다:
libc6-dev-armel-cross : 의존: libc6-armel-cross (= 2.13-37) 하지만 2.17-93 패키지를 설치할 것입니다
의존: libc-dev-bin-armel-cross (= 2.13-37) 하지만 %s 패키지를 설치하지 않을 것입니다
E: 문제를 바로잡을 수 없습니다. 망가진 고정 패키지가 있습니다.
필요로 하는 libc6-dev-armel-cross가
설치된 버전 혹은 현재의 소스 리스트의 추천 버전과 맞지 않음을 이야기 하는 것 같다.
그래서 현재 설정된 패키지 환경하에서 어떤 버전이 추천되어 있거나 설치되어 있는지 살펴 보았다.
# apt-cache show libc6-armel-cross
Package: libc6-armel-cross
Status: install ok installed
Priority: extra
Section: libs
Maintainer: GNU Libc Maintainers <debian-glibc@lists.debian.org>
Architecture: all
Source: eglibc
Version: 2.17-93
Provides: glibc-2.17-1-armel-cross, libc6-armel-dcv1
Depends: libgcc1-armel-cross
Conflicts: prelink-armel-cross (<= 0.0.20090311-1), tzdata-armel-cross (<< 2007k-1), tzdata-etch-armel-cross
Description: Embedded GNU C Library: Shared libraries (for cross-compiling)
This package was generated by dpkg-cross for cross compiling.
.
Contains the standard libraries that are used by nearly all programs on
the system. This package includes shared versions of the standard C library
and the standard math library, as well as many others.
Description-md5: 24a92b169d87e4acb423e610210802be
Package: libc6-armel-cross
Version: 2.13-37
Architecture: all
Maintainer: GNU Libc Maintainers <debian-glibc@lists.debian.org>
Source: eglibc
Provides: glibc-2.13-1-armel-cross, libc6-armel-dcv1
Depends: libc-bin-armel-cross (= 2.13-37), libgcc1-armel-cross
Conflicts: prelink-armel-cross (<= 0.0.20090311-1), tzdata-armel-cross (<< 2007k-1), tzdata-etch-armel-cross
Priority: extra
Section: libs
Filename: pool/main/e/eglibc/libc6-armel-cross_2.13-37_all.deb
Size: 1313090
SHA256: 8607015bf3d53b0b7cc79e0ce7208609c4feec58be1f3d8e8e02039bb0551044
SHA1: c241df537bfd49221c4d37fbd020582ee6ae0044
MD5sum: 54b58aa8641f7ada31e9199ed0405d69
Description: Embedded GNU C Library: Shared libraries (for cross-compiling)
This package was generated by dpkg-cross for cross compiling.
.
Contains the standard libraries that are used by nearly all programs on
the system. This package includes shared versions of the standard C library
and the standard math library, as well as many others.
Description-md5: 24a92b169d87e4acb423e610210802be
보아하니 설치된 것은 2.17-39이고 2.13-37도 제공하고 있는 것으로 추정된다.
정확히 무슨 말인지는 모르겠다.
그래서 해당 배포판의 해당 패키지의 정책에 대해서 살펴 보았다.
# apt-cache policy libc6-armel-cross
libc6-armel-cross:
설치: 2.17-93
후보: 2.17-93
버전 테이블:
*** 2.17-93 0
100 /var/lib/dpkg/status
2.13-37 0
500 http://ftp.uk.debian.org/emdebian/toolchains/ testing/main amd64 Packages
뭐 같은 이야기 인것 같다.
그럼 libc6-dev-armel-cross를 설치하는데 의존성을 가지고 있는 2.13-37 버전을 수동으로 설치하자.
# apt-get install libc6-armel-cross=2.13-37
패키지 목록을 읽는 중입니다... 완료
의존성 트리를 만드는 중입니다
상태 정보를 읽는 중입니다... 완료
다음 패키지를 더 설치할 것입니다:
libc-bin-armel-cross
다음 새 패키지를 설치할 것입니다:
libc-bin-armel-cross
다음 패키지를 다운그레이드할 것입니다:
libc6-armel-cross
0개 업그레이드, 1개 새로 설치, 1개 업그레이드, 0개 제거 및 0개 업그레이드 안 함.
1,314 k바이트 아카이브를 받아야 합니다.
이 작업 후 0 바이트의 디스크 공간을 더 사용하게 됩니다.
계속 하시겠습니까? [Y/n]
자 그럼 중단된 설치를 마무리 하자.
# apt-get install linux-libc-dev-armel-cross libc6-armel-cross libc6-dev-armel-cross binutils-arm-linux-gnueabi gcc-4.7-arm-linux-gnueabi g++-4.7-arm-linux-gnueabi
cross toolchain의 설치는 마무리 된 것 같다. 그럼 gcc가 잘 설치 되었는지 살펴보자.
# arm-linux-gnueabi-gcc-4.7 -v
Using built-in specs.
COLLECT_GCC=arm-linux-gnueabi-gcc-4.7
COLLECT_LTO_WRAPPER=/usr/lib/gcc/arm-linux-gnueabi/4.7/lto-wrapper
Target: arm-linux-gnueabi
Configured with: ../src/configure -v --with-pkgversion='Debian 4.7.2-4' --with-bugurl=file:///usr/share/doc/gcc-4.7/README.Bugs --enable-languages=c,c++,go,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.7 --enable-shared --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/arm-linux-gnueabi/include/c++/4.7.2 --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --disable-libitm --enable-plugin --enable-objc-gc --disable-sjlj-exceptions --with-arch=armv4t --with-float=soft --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=arm-linux-gnueabi --program-prefix=arm-linux-gnueabi- --includedir=/usr/arm-linux-gnueabi/include --with-headers=/usr/arm-linux-gnueabi/include --with-libs=/usr/arm-linux-gnueabi/lib
Thread model: posix
gcc version 4.7.2 (Debian 4.7.2-4)
그럼 마지막으로 cross 컴파일된 각종 라이브러리를 자동으로 관리 해줄 xapt를 설치하자.
# apt-get install pdebuild-cross dpkg-cross xapt
xapt는 설치할 아키텍쳐와 설치할 패키지를 다음과 같이 지정하여 실행할 수 있다.
# xapt update
# xapt -a armel -m libpng12-0
위의 과정은 libpng12-0의 armel 아키텍쳐로 cross 컴파일된 버전을 설치하는 명령어이다.
댓글 없음:
댓글 쓰기