시스템에 설치된 라이브러리를 그대로 두고 최신 버전을 새로 설치한 후 그것을 사용해서 소스코드를 컴파일 할 필요가 있을 수 있다.
나는 오늘 GMime을 컴파일 해야 했는데 GMime은 GLib를 필요로 한다. 그리고 내 시스템에는 기본적으로 GLib 2.4.7 버전이 설치가 되어있는데 이 버전으로 GMime을 컴파일 할 때 에러가 발생했다. 그래서 GLib 2.12.12 버전을 소스컴파일해서 설치하고 이 버전을 사용해서 GMime을 컴파일 하려고 했다.
그런데 새로 설치한 GLib 2.12.12는 /usr/local에 기존 2.4.7 버전은 /usr/lib에 설치가 되어있었기 때문에 계속해서 /usr/lib에 설치된 2.4.7 버전을 사용해서 컴파일이 되는 문제가 있었다. 지금까지 종종 이런 문제가 생겼는데 그때마다 귀찮아서 이미 시스템에 설치된 라이브러리를 사용하도록 해버렸는데 오늘은 그게 불가능해서 해결방법을 찾아봤다.
가장 간단한 해결 방법은 CFLAGS와 LDFLAGS에 각각 -L과 -I 옵션을 사용해서 라이브러리와 헤더 파일의 위치를 지정하는 방법이 있다. 그런데 지금까지 이 옵션이 시스템 디렉토리(/usr/lib와 /usr/include)보다 우선하는지 여부를 확실히 몰랐었다. gcc와 ld의 man page를 찾아본 결과 -L과 -I 옵션으로 지정된 디렉토리가 시스템 디렉토리보다 우선적으로 처리되는것으로 적혀있다.
그리고 pkg-config를 사용하는 프로그램은 위 옵션 외에도 pkg-config가 라이브러리를 찾는 경로도 /usr/local 디렉토리를 우선적으로 검색하도록 바꿔줘야 한다. 이것은 PKG_CONFIG_PATH 환경 변수를 통해서 가능하다.
그러나 이렇게 하더라도 ld.so.conf나 LD_LIBRARY_PATH에 /usr/local/lib 보다 /usr/lib가 우선하고 있으면 안된다. 그리고 사용할 라이브러리가 설치된 후에 ldconfig를 사용해서 설치된 라이브러리를 시스템에 인식시킨 후에 아래 과정을 수행해야 한다.
아래는 위 방법을 조합해서 GMime을 컴파일 할 때 사용한 커맨드이다.

comments
comments rss (+댓글 쓰러가기)