저는 주말에 딱히 할 일이 없으면, 도서관에 가기를 좋아합니다. 집에서 뭘 해도 좋긴 하지만, 아무래도 도서관에 가면 뭔가 자신에게 자극이 될만한 열기가 느껴져서, 느슨하게 되지 않으니까 - 사실 도서관에 가면 자세 자체는 상당히 느슨합니다만 ? 어느 정도 나에게 생활에 팽팽한 긴장감을 줍니다. 도서관을 향해 가는 길에서는 마치 소풍을 가는 것 같은 느낌, 막상 자리에 앉았을 때는 "자, 집중 좀 해 볼까" 라는 생각, 또는 책을 들여다 보는 다른 사람들의 열기를 보면서, "아, 이제까지 너무 느슨했나" 하는 약간의 반성, 집에 돌아오는 길에 뭐 약간의 의기양양함. 뭐 기껏해야 그 정도 이지만 아무튼, 가장 여유로우면서도 가장 뭔가를 많이 할 수 있는 곳입니다. 책을 들여다 보는 것만 하는 것이 아니라, 앉아 있는 동안 뭔가를 열심히 생각하기도 한다니까요. Library는 "도서관" 입니다.
Compile 하다가 왠 도서관이 나왔느냐, 라고 생각하니, 뜬금없기도 하네요. Library의 다른 정의는 미리 컴파일을 해 놓은 Object file의 모음이라고 보시면 되겠습니다. 이런 Library를 사용하는 이유는 두 가지 정도 인데, 하나는 자주 사용하는 함수들을 굳이 Compile할 때 마다 새로 할 것이 아니라, 미리 만들어 두면 Link 할 때, 연결만 하면 되니까 편리하다고 치고, 나머지 하나는 source code를 공개하지 않아도 된다는 점 입니다. 음, 이렇게 얘기하고 나니 약간 모자란 느낌인데요, 왜 도서관이냐 하면 한번 compile해 놓고, 굳이 새로 만들 필요 없이 도서관에서 자료를 찾을 때처럼, Linker가 도서관 안에서 원하는 자료를 찾은 다음 새로 연결만 하면 되니까, 도서관이라고 부릅니다. 상당히 시적인 표현이네요. 도서관이라..
아주 비근한 예를 들면 "printf" 같은 것들인 거죠. printf 같은 것들을 프로그래밍할 때마다 다시 짠 다음에, Compile해서 넣는다면 프로그래머는 너무나 힘들여서 프로그래밍 한다고 봐야 하지 않을까요? 음, 그리고 또 용어 하나에 익숙해 질 필요가 있겠습니다. Archive [아-카이브]라는 단어인데요, 뜻을 찾아보면 공문서 보관소, 또는 여러 개의 파일을 압축하여 하나로 모은 것이라는 풀이가 나오는데, 과연, 도서관에 어울리는 단어로서 또한 이런 Library를 Archive file이라고도 부릅니다. - file들을 압축 할 때, Archive한다고 표현하는데, 저는 아카-이브 라고 하는 이 발음이 개인적으로 좋습니다 ?
다시 말해 Library는 이런 compile된 object file들을 압축해서 한 개의 file로 관리하는 것이라 보면 되겠습니다.
다음의 질문에 답해 보세요. 컴파일 되어 있는 spaghetti.o, applejuice.o, ramen.o를 recipes.lib가 이름인 library로 만들어 봅시다. ARM에서 Archive를 할 때는 armar을 사용합니다.
armar -r recipes.lib spaghetti.o, applejuice.o ramen.o
이것이 답입니다. 간단하죠? linker는 library도 다른 여느 object file과 마찬가지로 취급하여, link 할 때, linker의 input으로 사용합니다. "컴파일 공장 이야기" 편에 나온 커다란 그림을 다시 한번 상기해 보세요. armar을 통해 만들어낸 .lib는 linker의 input으로 다시 사용됩니다.한가지 더, spaghetti.o, applejuice.o, ramen.o는 tcc -c spaghetti.c applejuice.c ramen.c 로 만드는 것은 잊지 않았겠죠? - 노파심 주인 백 -
그리고요, 보통 library때문에 큰 binary 만들 때, link error를 심심치 않게 보는데요, 그럴 때는 library를 까볼 수 있어야겠지요?마찬가지로 armar을 이용하는데 그건~ 바로 다음에서~ 살펴 보시죠.
댓글