RPM으로 설치한 라이브러리는 대개 컴파일시 -g flag가 빠져있어서
gdb와 같은 디버거로 소스를 추적(step 명령으로)할 수 없게 되어
있습니다.

일반 사용자라면 아무런 지장이 없지만, 라이브러리 사용법을 배우고자
하는 개발자라면 (특히 open source 계열의 라이브러리들은 문서가
부족하기 때문에) 디버깅시 라이브러리 함수 안으로 step in 할 필요가
있습니다.

따라서 다음과 같은 과정으로 라이브러리를 다시 만들 수 있습니다.

예를 들어 개발자가 gtk 관련 함수를 추적하고 싶다고 가정합시다.

1. 일단 필요한 라이브러리 패키지 이름을 알아야 합니다.
만약 필요한 소스 RPM을 가지고 있다면 단계 3부터 보기 바랍니다.

1.1. 간단히 다음과 같이 query 옵션을 써서 알아내거나,

$ rpm -qa | grep -i jpeg
libjpeg-devel-6b-21
...

1.2. 관련 라이브러리 파일 이름을 안다면 다음과 같이 알아냅니다.

$ rpm -qf /usr/lib/libjpeg.a
libjpeg-devel-6b-21

2. 다음으로, 이 라이브러리의 소스 RPM 패키지 이름을 알아냅니다.

$ rpm -qi libjpeg-devel
... Source RPM: libjpeg-6b-21.src.rpm
...

3. 이제 rpmfind.net이나 기타 사이트에서 이 소스 RPM을 받습니다.

4. 이제부터는 root 권한이 필요합니다.
일단 /etc/rpmrc 파일을 열어봅니다. (없으면 만듭니다.)

마지막 란에 다음을 추가합니다.

optflags: i686 -g -O2 -mcpu=i686
optflags: i386 -g -O2 -march=i386

(참고로 /usr/lib/rpm/rpmrc를 보면 단지 '-g'만이 추가된
것을 알 수 있습니다.)
이 과정은 rpm 패키지를 만들때 기본적으로 쓸 컴파일러 flag을
지정하는 것입니다.

5. 다음으로 이 소스 rpm을 설치합니다.

# rpm -Uvh libjpeg-6b-21.src.rpm

디폴트로 RPM spec file은 /usr/src/redhat/SPECS/에
설치됩니다.

# ls /usr/src/redhat/SPECS
libjpeg.spec

이제 다음 명령으로 새 패키지를 만듭니다.
제 경우는 Pentium III CPU를 쓰기 때문에 스피드 향상도 꽤할겸
펜티엄 전용 코드를 만들어 냅니다.
(다른 경우라면 아래 명령에서 --target=... 을 빼면 됩니다.)

# cd /usr/src/redhat/SPECS
# rpmbuild --target=i686-redhat-linux-gnu -ba libjpeg.spec

(이 과정은 rpm 파일을 만들기 때문에 상당한 시간이 걸립니다.)

이제 원하는 RPM 파일은 /usr/src/redhat/RPMS/i686에
위치하게 됩니다. (target 옵션을 안 줬으면 .../i386에 위치)
또한 이 과정을 거친 다음의 소스는 /usr/src/redhat/BUILD
에 위치합니다.

6. 5에서 만들어진 RPM을 설치합니다.
# rpm -Uvh --force libjpeg-6b-21.i686.rpm
# rpm -Uvh --force libjpeg-devel-6b-21.i686.rpm

이제 끝났습니다.
5의 과정에서 만들어진 패키지의 소스(/usr/src/redhat/BUILD에 위치)
를 지우지만 않는다면 앞으로 gdb로 debugging할 때 library
함수도 step 명령으로 추적할 수 있습니다.







번호 제목 글쓴이 날짜 조회 수
75 patch (diff ) 파일 만들고, 적용시키기. [2] Myip 심걸 2011.07.20 10342
74 file을 이용해서 간단하게 중복 실행(?)등 체크.. Myip 심걸 2011.07.20 9634
» 디버깅시 RPM 설치된 라이브러리 step-in 하기. Myip 심걸 2011.07.20 9687
72 Kernel IDE 최적화 Myip 심걸 2011.07.20 9921
71 [Tip]매직키를 이용한 비상부팅.. Myip 심걸 2011.07.20 9626
70 커널 모듈의 정보 Myip 심걸 2011.07.20 9815
69 커널 Panic시 시스템 자동 재부팅 Myip 심걸 2011.07.20 9541
68 간단히 커널 버전알기 Myip 심걸 2011.07.20 9971
67 커널컴파일 종료 사용자에게 알려주기 Myip 심걸 2011.07.20 9892
66 같은 버전의 커널들을 한 파티션에 넣는 비법 [15] Myip 심걸 2011.07.20 10033
65 리눅스에서 avifile을 이용하여서 divx 파일보기 Myip 심걸 2011.07.20 9900
64 xmms로 음악들을때, 일정한 소리크기로 듣기. Myip 심걸 2011.07.20 9547
63 mp3 파일을 ogg 파일로 빠르게 변환하기 Myip 심걸 2011.07.20 9743
62 리눅스에서 TV카드 잡기 little on air Myip 심걸 2011.07.20 9613
61 alsa와 timidity를 써서 멋진 미디장비 만들기. [1] Myip 심걸 2011.07.20 9731
60 자막파일의 시간부분 일괄적으로 바꾸기 Myip 심걸 2011.07.20 9614
59 스왑 파일 만들기 Myip 심걸 2011.07.20 9428
58 LINUX 표준시간 설정하기 [53] Myip 심걸 2011.07.20 9982
57 부팅시에 DAEMON 의 구동을 ON/OFF 하는 방법 [1] Myip 심걸 2011.07.20 9577
56 리눅스 시스템 시간 맞추는 방법 Myip 심걸 2011.07.20 8857