2014년 8월 26일 화요일

pkg-config 간단 사용법

apt-get 등으로 library 는 설치했는데 컴파일에 필요한 header 파일 들과 .so 파일들이 어디 있는지 찾기 힘드셨죠?

gcc 옵션에 -I (대문자 i) 는 header 파일들이 위치한 폴더를 지정하고 -L 은 lib 파일들이 위치한 폴더를 지정하고 -l (소문자 L) 은 특정 .so 파일을 지정합니다.

pkg-config 를 이용해서 설치된 library 들의 목록과 위 compile 옵션에 추가할 값들을 손쉽게 얻을 수 있습니다.



이미 설치되어 있는 경우가 대부분이겠지만 그렇지 않다면 아래와 같이 설치 하실 수 있습니다.
$ sudo apt-get install pkg-config


1. 설치된 library 목록 확인


$ pkg-config --list-all
shared-mime-info               shared-mime-info - Freedesktop common MIME database
gmodule-no-export-2.0          GModule - Dynamic module loader for GLib
ncurses++                      ncurses++ - ncurses 5.9 add-on library
form                           form - ncurses 5.9 add-on library
pthread-stubs                  pthread stubs - Stubs missing from libc for standard pthread functions
xt                             Xt - X Toolkit Library
xtrans                         XTrans - Abstract network code for X
gnome-icon-theme               gnome-icon-theme - A collection of icons used as the basis for GNOME themes
menu                           menu - ncurses 5.9 add-on library
xdmcp                          Xdmcp - X Display Manager Control Protocol library
libpcreposix                   libpcreposix - PCREPosix - Posix compatible interface to libpcre
tic                            tic - ncurses 5.9 add-on library
gio-unix-2.0                   GIO unix specific APIs - unix specific headers for glib I/O library
gupnp-1.0                      gupnp-1.0 - GObject-based UPnP library
kbproto                        KBProto - KB extension headers
pm-utils                       pm-utils - Power management scripts for suspend and hibernate
zlib                           zlib - zlib compression library
...


grep 을 이용해서 원하는 library 가 설치되었는지 확인 할 수 있겠죠?

$ pkg-config --list-all | grep glib
gio-unix-2.0                   GIO unix specific APIs - unix specific headers for glib I/O library
gio-2.0                        GIO - glib I/O library
libsoup-2.4                    libsoup - a glib-based HTTP library
glib-2.0                       GLib - C Utility Library


2. --cflags

$ pkg-config --cflags glib-2.0
-I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include


3. --libs 

$ pkg-config --libs glib-2.0
-lglib-2.0


4. 컴파일에 적용

main.c: glib 을 이용한 아주 간단한 프로그램

#include <unistd.h>
#include <glib.h>

int main(int argc, char * args[]) {

    g_print("Hello Glib!\n");
   
    return 0;
}


compile:

$ gcc -o test main.c `pkg-config --cflags --libs glib-2.0`

아래와 같이 일일이 입력하지 않아도 되니 편합니다.

$ gcc -o test main.c -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -lglib-2.0

실행:

$ ./test
Hello Glib!


5. 팁

한번에 여러 라이브러리 지정도 가능합니다.

$ pkg-config --cflags --libs glib-2.0 zlib jansson
-I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include  -lglib-2.0 -lz -ljansson


댓글 1개: