DB 라이브러리를 이용한 소스 컴파일... gdbm, mysql

 최근 Beginning Linux Programming 3/E 라는 책을 보고 있는데, dbm 라이브러리, mysql 라이브러리를 이용하는 예제 소스가 있었는데 뭐가 문제인지 컴파일이 되지 않았다.

 gdbm 라이브러리의 경우 두가지 문제가 있었는데, 첫번째는 ndbm.h 라는 파일이 존재하지 않았다. 이 문제는 우분투(ubuntu) 에 국한된 문제일 수도 있다. 해결방법은 의외로 간단해서 /usr/include 에 있는 gdbm-ndbm.h 를 ndbm.h로 심볼릭 링크를 걸어주면 된다.
$ sudo ln -s /usr/include/gdbm-ndbm.h /usr/include/ndbm.h
$ ls /usr/include/*dbm* -l
-rw-r--r-- 1 root root 1563 2006-06-16 06:19 /usr/include/dbm.h
-rw-r--r-- 1 root root 2003 2006-06-16 06:19 /usr/include/gdbm-ndbm.h
-rw-r--r-- 1 root root 4744 2006-06-16 06:19 /usr/include/gdbm.h
lrwxrwxrwx 1 root root   11 2007-02-07 16:18 /usr/include/ndbm.h -> gdbm-ndbm.h
 두번째 문제는 심볼릭 링크를 걸고 컴파일을 했지만 아래처럼 에러가 나면서 컴파일이 되지 않았다.
$ gcc dbm1.c -o dbm1 -lgdbm
/tmp/ccdkPBWO.o: In function `main':
dbm1.c:(.text+0x3a): undefined reference to `dbm_open'
dbm1.c:(.text+0x204): undefined reference to `dbm_store'
dbm1.c:(.text+0x2ae): undefined reference to `dbm_fetch'
dbm1.c:(.text+0x32c): undefined reference to `dbm_close'
collect2: ld returned 1 exit status
 책에서는 -lgdbm 옵션을 주면 컴파일이 된다고 적혀 있었지만 인터넷을 찾아본 결과 -lgdbm_compat 옵션으로 컴파일을 해주어야 에러 없이 컴파일이 되었다. 이것 역시 우분투에만 국한된 문제일 수도 있다.

 mysql 라이브러리의 경우 큰 문제는 없었고, 이번엔 mysql이 깔려있는 데비안(debian)에서 컴파일을 시도 했는데, 당연한 문제로 mysql.h가 없어서 컴파일을 실패했다. 하지만 어떤 패키지를 설치해야 하는지 아리송해서 찾아보았다. 그 결과  libmysqlclient-dev 패키지를 설치해야 한다는 것을 알았다.
$ sudo apt-get install libmysqlclient-dev
꾸러미 목록을 읽는 중입니다... 완료
의존성 트리를 만드는 중입니다... 완료
libmysqlclient-dev 꾸러미는 다음 꾸러미가 제공하는 가상 꾸러미입니다:
  libmysqlclient12-dev 4.0.24-10sarge2
  libmysqlclient10-dev 3.23.56-3
설치하려면 분명하게 하나를 선택해야 합니다.
E: libmysqlclient-dev 꾸러미는 설치할 수 있는 후보가 없습니다
실재로 libmysqlclient-dev 라는 파일은 가상 패키지이고, 명확한 패키지명을 넣어 줘야 했다. 깔려 있는 mysql이 4.0.24 였기 때문에 libmysqlclient12-dev를 설치했고, 그 뒤로 컴파일에 문제가 없었다.

 딱히 포스팅을 할만큼 큰 문제는 아니라고 생각해서 망설이고 있었는데... 방명록의 환상경님이 포스팅이 뜸하다고 하시길래, 귀차니즘을 이겨내고 오랜만에 포스팅을 해본다.

참고 사이트
    http://ufies.org/pipermail/xfmail-users/2004-September/000531.html

by sakuragi | 2007/02/10 22:14 | :: C space :: 컴퓨터 | 트랙백 | 덧글(9)

트랙백 주소 : http://sakuragis.egloos.com/tb/3090944
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Commented by 환상경 at 2007/02/11 15:52
간만에 올라온 포스트가 이런 초 고수스런 알수없는 포스트라니 +_+
역시 굇수~

아 비기닝 저도 봐야하는데 아직도 소설C에 발목잡혀서 크흑 ㅡㅜ
Commented by LinDol at 2007/02/11 20:40
전혀 알수 없는 ㅜ_ㅜ
ㅊ굇수~
Commented by sakuragi at 2007/02/12 00:37
환상경, LinDol, 제가 전혀 굇수는 아니예요... :(
근데 다시 보니 정말 뭔가 알 수 없이 적은 느낌이네요.
그냥 C 에서 데이터 베이스를 쓰기 위한 라이브러리일 뿐인데 그 설명을 할 껄 그랬나보군요.
실제로 라이브러리를 쓰는 예제를 보면 아무것도 아니예요.
단지 컴파일을 못해서 애를 먹었을 뿐.. :D
Commented by 아희 at 2007/02/17 20:40
오라버니!!' '/,,, 항상 열심히 하시는군요- = ㅅ=a,, 멋쟁이!! : )
Commented by sakuragi at 2007/02/21 16:08
아희, ( - _-)a 그다지 열심히 하진 않는데...
Commented by 환상경 at 2008/03/20 20:36
흑 사쿨옹 ㅠ.ㅠ 저기 본문에 오타 하나요 -0-
-lgdbm-compat 이 아니라 -lgdbm_compat 이네요 >_<

흐 저 이제서야 dbm부분 보고 있다가 계속 에러나길래 검색해보니 사쿨옹의 이 페이지가 떡하니 나오더군요 ㅋㅋ
저때 당시에는 무슨 뜻인지 몰랐는데 으흐흐흐
아주 유용한 정보였었네요 감사합니다. 사쿨옹 =_=
Commented by sakuragi at 2008/03/21 09:01
환상경, 오타 수정했습니다. ^^ 감사합니다. ( __)
Commented by 국종혁 at 2009/02/13 16:29
유용한 정보네요~ -lgdbm_compat 이거몰라 헤매던중이었는데~
Commented by sakuragi at 2009/02/19 09:42
저도 한참 헤맸었죠~ ^^;

:         :

:

비공개 덧글

◀ 이전 페이지          다음 페이지 ▶

:+: sakuragi's Steam :+: