Gcc 질문입니다

안녕하세요. 계속적으로 madplay에 대해서 분석하고 있는 taba입니다.

현재 Makefile을 분석중입니다.

궁금한것이 Makefile 마지막 부분입니다.

[code:92z3xr7q]gcc -Wall -g -O2 -o madplay madplay.o getopt.o getopt1.o version.o resample.o filter.o tag.o crc.o rgain.o player.o audio.o audio_aiff.o audio_cdda.o audio_hex.o audio_null.o audio_raw.o audio_snd.o audio_wave.o audio_alsa.o -lasound -lmad /usr/lib/libid3tag.so -lz -lm
[/code:92z3xr7q]

위와 같은 마지막 부분인데요. -lasound -lmad 이부분이 gcc메뉴얼에도 없네요. 라이브러리를 하나의 옵션으로 걸수 있는것인가요? 아니면 뭔가 다른것이 있는것인가요? 답변을 기다리겠습니다.

-l 옵션은 라이브러리를 포함하라는 옵션입니다.
-I옵션의 대상이 헤더파일이라면… -l옵션은 컴파일된 오브젝트파일의 라이브러리입니다.
-lasound 이렇게 적게 되면, libasound.a 혹은 libasound.so를 포함하게 됩니다.

좀더 자세히 말씀드리자면…
*.c를 소스라고 부르고, *.o를 오브젝트파일 이라고 부릅니다.
그리고 *.a와 *.lib를 라이브러리라고 부르고, *.so를 공유라이브러리 혹은 동적라이브러리라 부릅니다.

오브젝트파일은 바이너리파일이고, 실행형 코드이지만…
실제 실행되려면, 외부코드 참조나 메모리내 적재정보가 있어야 합니다.
그래서 이러한 정보들을 모두 포함한 바이너리코드를 이진실행파일이라고 부릅니다.
여러개의 오브젝트 코드를 하나로 모으고, 여러가지 정보를 포함하여 실행파일을 만드는 과정을 링크라고 합니다.
이 링크과정에서 함수나 외부참조등을 기록하게 됩니다.
공유라이브러리는 링크가되더라도 실제 코드는 포함되지 않고, 참조정보만 넣게되고…
실행시에 해당 라이브러리를 참조할 수 없을 시엔 오류가 발생합니다.

감사합니다. 책에도 그런 설명이 있네요. 물론 답변을 보고난 다음에 1주일 뒤에 찾은 책에 말이죠. 공부좀 해야겠네요. 컴파일