336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
명강사로 소문난 사람이 있었습니다. 수많은 사람이 모인 세미나에서 강사는 호주머니에서 100달러 짜리 지폐를 높이 들고 말했습니다. “여러분 중에 이 돈을 갖고 싶은 사람, 손 한번” 그러자 세미나에 참석한 사람들 대부분이 손들 들었습니다. “저는 여러분 중 한 사람에게 이 돈을 드릴 생각입니다. 하지만 먼저 제 손을 주목해 주시기 바랍니다.” 그러더니 강사는 갑자기 100달러 짜리 지폐를 구겨 버리는 게 아니겠습니까? 갑작스러운 강사의 행동에 놀라면서도 대부분의 사람들이 또 다시 손을 들었습니다. 이번에는 그 100달러 짜리 지폐를 땅바닥에 집어 던져 구둣발로 밟으며 있는 대로 더럽혔습니다. 강사는 구겨지고 더러워진 그 100달러 짜리를 집어 들고는 아직도 그 돈을 갖고 싶은지 물었습니다. 또 다시 거의 모두가 손을 들었습니다. 이때 강사는 힘찬 어조로 말했습니다. “제가 아무리 100달러 짜리 지폐를 마구 구기고, 발로 짓밟고, 더럽혔지만 그 가치는 전혀 줄어들지 않았습니다. 여러분도 인생이라는 무대에서 여러 번 바닥에 떨어지고, 밟히며 더러워지는 경험을 했을 것입니다. 실패와 패배 또는 절망이라는 이름으로 겪게 되는 그 아픔들… 그런 아픔을 겪게 되면 사람들은 대부분 자신을 평가절하 합니다. 그러나 기억하십시오. 당신이 어떤 실패를 경험하더라도 당신의 본래 가치는 여전하다는 것을, 마치 내 구둣발에 밟히고 더러워져도 여전히 제 가치를 가지고 있는 이 지폐처럼 말입니다. 그러므로 성공은 결코 포기하지 않는 것입니다.”
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 만 가지고 디버깅 하시면 매우 힘들끼 때문입니다.
더구나 익숙해지면 의외로 막강한 기능에 놀라시게 됩니다.
이 놈을 굳이 툴체인에 포함시키지 않는 것은 상호 연관관계가 별로 없어서
입니다.