GCC. 그리고 build, host, target에 대해서
gcc에서 build, host, target은... 일반적인 x86을 벗어난다고 생각했을때
개념이 약간은 애매하지만 중요한 요소라 할 수 있다.
물론 gcc에서 공식적으로 사용되는 기능이기도하다.
또한 본인은 임베디드 공부를 하려고 물끄럼 보다가 당체 헷갈려 그러려니 했었으나..
다른분들은 그러지 않기를 바라는 마음에서 이 글을 쓴다.
(....맞다 메모성 성격도 강하다)
일단 몇가지 예를들어 각각의 설명을 하도록 한다.
1. x86에서 컴파일러를 빌드하며 x86에서 동작하는 x86바이너리를 만드는 컴파일러
build=i686-pc-linux-gnu, host=i686-pc-linux-gnu, target=i686-pc-linux-gnu
::Native compiler
2. x86에서 컴파일러를 빌드하며 x86에서 동작하는 arm용 바이너리를 만드는 컴파일러
build=i686-pc-linux-gnu, host=i686-pc-linux-gnu, target=armv5te
::Cross compiler
3. x86에서 컴파일러를 빌드하며 arm에서 동작하는 arm용 바이너리를 만드는 컴파일러
build=i686-pc-linux-gnu, host=armv5te, target=armv5te
::Crossed Native compiler
4. arm에서 컴파일러를 빌드하며 x86에서 동작하는 arm용 바이너리를 만드는 컴파일러
build=armv5te, host=i686-pc-linux-gnu, target=armv5te
::Crossback compiler
5. arm에서 컴파일러를 빌드하며 sparc에서 동작하는 arm용 바이너리를 만드는 컴파일러
build=armv5te, host=sparc5, target=armv5te
::Canadian compiler
4번과 5번의 경우는 극단적인 예를 든것이지만...
(생각해보라.. 누가 arm에서 x86에서 사용할 수 있는 cross back compiler를 빌드하겠는가..-.-)
여튼 이런식의 별도 이름을 가지고 있다.
일반적으로 우리가 임베디드에서 사용하기 위해서는 2번과 3번을 사용하게 되겠다.
물론 모모 특정직업군처럼.. zaurus등을 들고다니면서
intel용 바이너리를 만들어 쓰고자 하는 경우는 4번을 응용해서 빌드하시면 되시겠다만..
본인은 그럴 생각등은 전혀 가지고 있지 않은바이다.
gcc를 빌드시.. 또는 일반적인 소스를 빌드할때
또는 gtk를 cross compiler를 이용해서 arm용으로 빌드할때등에 이용하면
인생에 도움되는 상황 되리라 생각한다.