336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
4. gcc의 짝꿍들
gcc 는 컴파일러입니다. 당연히 소스를 컴파일 할수 있읍니다.
그런데 gcc만 가지고 있어서는 아무런 일도 못합니다.
왜냐구요?
그이유를 알고 싶으시다면 kelp/임베디드강좌/초보 에
holelee 님이 쓰신 gcc 이야기 시리즈를 읽어 보시기 바랍니다.
( 개인적으로 많은 깨달음을 얻게 해준 내용 입니다 )
그래서 gcc 이외에 필요한 프로그램과 데이타(?)들이 있읍니다.
이런 것을 모두 모은 것을 크로스 컴파일러 툴 체인이라고 합니다.
컴파일러 툴이라면 될 텐데 굳이 체인이라고 붙인 이유는
제 개인적인 생각으로는 각 패케지간에 서로 의존적이기 때문일것으로
추측합니다.
이 툴 체인의 목록은 다음과 같습니다 .
binutils - 어셈블러, 링커 그리고 라이브러리 관련 실행 화일들 모음
kernel - 리눅스 커널 ( 헤더 파일 때문에 필요함 )
gcc - 컴파일러
glibc - 라이브러리 및 헤더화일
추가적으로
gdb - 디버거 ( 이놈은 그냥 옵션으로 생각하시면 됩니다. ^^ )
가 있읍니다.
4.1 gcc의 3.0 대의 속설(?)
많은 분들은 gcc의 3.0 대에 문제가 있다고 알고 있어서
이 버전을 회피하시면서 예전 버전을 고집하시는 경향이 있읍니다.
그런데 이 부분은 오해랍니다.
문제가 되는 버전은 gcc 3.0 입니다.
당연히 문제가 발생했으니 해당 버전을 고쳤겠지요
그래서 3.1 대 이후라면 별 문제는 없읍니다
크로스 컴파일을 하시는 분이라면 최근 프로세스를 쓰기 위해서는
예전 버전으로는 한계가 있읍니다.
최신 버전을 쓰셔야 지원되는 프로세스가 있읍니다.
넘 겁먹지 마시고 3.0대를 쓰시기 바랍니다.
4.2 binutils
바이너리 유틸이라고 합니다.
포함되는 내용은 다음과 같죠...
addr2line - 실행화일의 어드레스에 대한 소스화일명과 라인 넘버를 표현해주는 프로그램입니다.
ar - 라이브러리를 관리하는 프로그램입니다.
as - 어셈블러 입니다.
c++filt - 잘 모르겠읍니다. ^^
gasp - 어셈블러 매크로 해석기 입니다.
ld - 링커 입니다.
nm - 오브젝트안의 심볼릭을 표시해 주는 프로그램입니다.
objcopy - 오브젝트 화일을 컨버팅 해주는 프로그램입니다.
objdump - 오브젝트 화일의 정보를 표시해 줍니다.
ranlib - 라이브러리의 인덱스 화일을 생성합니다.
readelf - elf 포맷의 화일 헤더 정보를 해석해 줍니다.
size - 오브젝트 화일의 섹션 크기와 포함된 오브젝트의 총 크기를 표시해 줍니다.
strings - 프로그램 내부에 사용되는 초기화 문자열들을 골라 표시해 줍니다.
strip - 오브젝트나 실행화일의 정보를 선택적으로 제거해 줍니다.
4.3 kernel
크로스 컴파일러를 만들때 사용되는 데이타 타입이나 시스템 콜을 참조하기 위해서
필요한 헤더화일을 참조하기 때문에 툴체인에 들어 갑니다.
엄밀히 말하면 kernel의 헤더화일만 필요합니다.
4.4 gcc
패케지가 일반적으로 지원하는 것은 각 언어별로 지원합니다.
다음은 크로스 컴파일러로 쓰는 대표적인 것 들입니다.
gcc,cpp,g++,c++,gccbug,gcov
설명을 굳이 달지 않는 이유는 저는 gcc 이외에는 거의 쓰지 않기 때문에
뭐하는 놈들인지 잘 몰라서 입니다. 이해해 주세요...
4.5 glibc
커널을 컴파일하거나 부트로더를 컴파일 할때는 필요 없읍니다.
하지만 응용프로그램을 사용한다면 당연히 이것이 있어야 합니다.
여러분들 중에서 glibc와 newlib 를 혼동하시는 분들이 있읍니다.
glibc 는 GNU 라이브러리 입니다. 크기가 매우 커집니다.
newlib는 glibc가 매우 크기 때문에 꼭 필요한 놈들만 골라서 추려놓은 것이죠
그래서 크기가 매우 작습니다.
특별한 경우가 아니라면 저는 newlib를 별로 추천하지 않습니다.
가끔 리눅스용 프로그램을 임베디드 제품에 포팅하다보면 없는 함수가 있어서
곤란을 겪기 때문입니다.
램이나 플래쉬 시스템이 16M 이상이고 여유가 있다면 가급적 glibc를 쓰시기를
권유합니다.
4.6 gdb
이놈은 디버거죠..
즉 프로그램을 디버깅 할때 유용한 도구 입니다.
하지만 윈도우 디버거를 사용하시던 분이라면 매우 불편함을 느끼실 겁니다.
하지만 없는 것 보다는 있는 것이 좋습니다.
printf 만 가지고 디버깅 하시면 매우 힘들끼 때문입니다.
더구나 익숙해지면 의외로 막강한 기능에 놀라시게 됩니다.
이 놈을 굳이 툴체인에 포함시키지 않는 것은 상호 연관관계가 별로 없어서
입니다.
gcc 는 컴파일러입니다. 당연히 소스를 컴파일 할수 있읍니다.
그런데 gcc만 가지고 있어서는 아무런 일도 못합니다.
왜냐구요?
그이유를 알고 싶으시다면 kelp/임베디드강좌/초보 에
holelee 님이 쓰신 gcc 이야기 시리즈를 읽어 보시기 바랍니다.
( 개인적으로 많은 깨달음을 얻게 해준 내용 입니다 )
그래서 gcc 이외에 필요한 프로그램과 데이타(?)들이 있읍니다.
이런 것을 모두 모은 것을 크로스 컴파일러 툴 체인이라고 합니다.
컴파일러 툴이라면 될 텐데 굳이 체인이라고 붙인 이유는
제 개인적인 생각으로는 각 패케지간에 서로 의존적이기 때문일것으로
추측합니다.
이 툴 체인의 목록은 다음과 같습니다 .
binutils - 어셈블러, 링커 그리고 라이브러리 관련 실행 화일들 모음
kernel - 리눅스 커널 ( 헤더 파일 때문에 필요함 )
gcc - 컴파일러
glibc - 라이브러리 및 헤더화일
추가적으로
gdb - 디버거 ( 이놈은 그냥 옵션으로 생각하시면 됩니다. ^^ )
가 있읍니다.
4.1 gcc의 3.0 대의 속설(?)
많은 분들은 gcc의 3.0 대에 문제가 있다고 알고 있어서
이 버전을 회피하시면서 예전 버전을 고집하시는 경향이 있읍니다.
그런데 이 부분은 오해랍니다.
문제가 되는 버전은 gcc 3.0 입니다.
당연히 문제가 발생했으니 해당 버전을 고쳤겠지요
그래서 3.1 대 이후라면 별 문제는 없읍니다
크로스 컴파일을 하시는 분이라면 최근 프로세스를 쓰기 위해서는
예전 버전으로는 한계가 있읍니다.
최신 버전을 쓰셔야 지원되는 프로세스가 있읍니다.
넘 겁먹지 마시고 3.0대를 쓰시기 바랍니다.
4.2 binutils
바이너리 유틸이라고 합니다.
포함되는 내용은 다음과 같죠...
addr2line - 실행화일의 어드레스에 대한 소스화일명과 라인 넘버를 표현해주는 프로그램입니다.
ar - 라이브러리를 관리하는 프로그램입니다.
as - 어셈블러 입니다.
c++filt - 잘 모르겠읍니다. ^^
gasp - 어셈블러 매크로 해석기 입니다.
ld - 링커 입니다.
nm - 오브젝트안의 심볼릭을 표시해 주는 프로그램입니다.
objcopy - 오브젝트 화일을 컨버팅 해주는 프로그램입니다.
objdump - 오브젝트 화일의 정보를 표시해 줍니다.
ranlib - 라이브러리의 인덱스 화일을 생성합니다.
readelf - elf 포맷의 화일 헤더 정보를 해석해 줍니다.
size - 오브젝트 화일의 섹션 크기와 포함된 오브젝트의 총 크기를 표시해 줍니다.
strings - 프로그램 내부에 사용되는 초기화 문자열들을 골라 표시해 줍니다.
strip - 오브젝트나 실행화일의 정보를 선택적으로 제거해 줍니다.
4.3 kernel
크로스 컴파일러를 만들때 사용되는 데이타 타입이나 시스템 콜을 참조하기 위해서
필요한 헤더화일을 참조하기 때문에 툴체인에 들어 갑니다.
엄밀히 말하면 kernel의 헤더화일만 필요합니다.
4.4 gcc
패케지가 일반적으로 지원하는 것은 각 언어별로 지원합니다.
다음은 크로스 컴파일러로 쓰는 대표적인 것 들입니다.
gcc,cpp,g++,c++,gccbug,gcov
설명을 굳이 달지 않는 이유는 저는 gcc 이외에는 거의 쓰지 않기 때문에
뭐하는 놈들인지 잘 몰라서 입니다. 이해해 주세요...
4.5 glibc
커널을 컴파일하거나 부트로더를 컴파일 할때는 필요 없읍니다.
하지만 응용프로그램을 사용한다면 당연히 이것이 있어야 합니다.
여러분들 중에서 glibc와 newlib 를 혼동하시는 분들이 있읍니다.
glibc 는 GNU 라이브러리 입니다. 크기가 매우 커집니다.
newlib는 glibc가 매우 크기 때문에 꼭 필요한 놈들만 골라서 추려놓은 것이죠
그래서 크기가 매우 작습니다.
특별한 경우가 아니라면 저는 newlib를 별로 추천하지 않습니다.
가끔 리눅스용 프로그램을 임베디드 제품에 포팅하다보면 없는 함수가 있어서
곤란을 겪기 때문입니다.
램이나 플래쉬 시스템이 16M 이상이고 여유가 있다면 가급적 glibc를 쓰시기를
권유합니다.
4.6 gdb
이놈은 디버거죠..
즉 프로그램을 디버깅 할때 유용한 도구 입니다.
하지만 윈도우 디버거를 사용하시던 분이라면 매우 불편함을 느끼실 겁니다.
하지만 없는 것 보다는 있는 것이 좋습니다.
printf 만 가지고 디버깅 하시면 매우 힘들끼 때문입니다.
더구나 익숙해지면 의외로 막강한 기능에 놀라시게 됩니다.
이 놈을 굳이 툴체인에 포함시키지 않는 것은 상호 연관관계가 별로 없어서
입니다.
'Programming > Linux embedded' 카테고리의 다른 글
glut 크로스 컴파일하기 (0) | 2008.08.22 |
---|---|
ARToolKit MRP-S3C2440(REBIS)용으로 포팅하기 2부(삽질성과 1호!!!) -미완 (0) | 2008.07.10 |
ARToolKit MRP-S3C2440(REBIS)용으로 포팅하기 1부(삽질성과 1호!!!) (0) | 2008.07.10 |
도대체 크로스 컴파일러 툴 체인 이란 무엇인가?(1) -유영창 (0) | 2008.05.21 |
RISC는 임베디드에 유용한가? (0) | 2008.05.21 |