2011-04-22 4 views
6

다음 헤더가있는 C 프로그램을 컴파일하려고합니다 : 우분투에 http://pastebin.com/SppCXb0U.dbus 헤더 파일을 사용하여 C 프로그램 컴파일

gcc `pkg-config --cflags --libs dbus-1` `pkg-config --cflags --libs glib-2.0` signals-tutorial.c 

그러나, 그것은 여전히 ​​작동하지 않고 나에게이 오류 제공 :

/tmp/cc3BkbdA.o: In function `filter_example': 
signals-tutorial.c:(.text+0x1a3): undefined reference to `dbus_connection_setup_with_g_main' 
/tmp/cc3BkbdA.o: In function `proxy_example': 
signals-tutorial.c:(.text+0x29a): undefined reference to `g_type_init' 
signals-tutorial.c:(.text+0x2b3): undefined reference to `dbus_g_bus_get' 
signals-tutorial.c:(.text+0x323): undefined reference to `dbus_g_proxy_new_for_name' 
signals-tutorial.c:(.text+0x369): undefined reference to `dbus_g_proxy_add_signal' 
signals-tutorial.c:(.text+0x38a): undefined reference to `dbus_g_proxy_connect_signal' 
collect2: ld returned 1 exit status 
을 처음에 나는이 줄을 만들어진 모든하지만 PKG-설정에 대한 책을 읽은 후 운이 없었

여기에서 무엇을해야할지 모르겠습니다.

좋은 설명 ==================================

은 - 감사합니다. 그러나, 나는 그것을 작동시킬 수 없다. (AN 추가로) 위의 명령을 실행하면 다음과 같은 결과

gcc `pkg-config --cflags dbus-1` \ 
>  `pkg-config --cflags glib-2.0` \ 
>  signals-tutorial.c \ 
>  `pkg-config --libs dbus-1` \ 
>  `pkg-config --libs glib-2.0` 
/tmp/ccjN0QMh.o: In function `filter_example': 
signals-tutorial.c:(.text+0x1a3): undefined reference to `dbus_connection_setup_with_g_main' 
/tmp/ccjN0QMh.o: In function `proxy_example': 
signals-tutorial.c:(.text+0x29a): undefined reference to `g_type_init' 
signals-tutorial.c:(.text+0x2b3): undefined reference to `dbus_g_bus_get' 
signals-tutorial.c:(.text+0x323): undefined reference to `dbus_g_proxy_new_for_name' 
signals-tutorial.c:(.text+0x369): undefined reference to `dbus_g_proxy_add_signal' 
signals-tutorial.c:(.text+0x38a): undefined reference to `dbus_g_proxy_connect_signal' 
collect2: ld returned 1 exit status 

답변

12

귀하의 문제가 문제가 라이브러리 함께, 헤더 파일을하지를 얻을; "정의되지 않은 참조"에 대한 불만은 일반적으로 링커에서 발생합니다. 당신은 후 라이브러리 구성 옵션을 소스 파일 을 둘 필요가 다음 --libs 옵션은 컴파일러 -l 플래그 시리즈를 생산합니다

gcc `pkg-config --cflags dbus-glib-1` \ 
    `pkg-config --cflags dbus-1` \ 
    `pkg-config --cflags glib-2.0` \ 
    signals-tutorial.c \ 
    `pkg-config --libs dbus-glib-1` \ 
    `pkg-config --libs dbus-1` \ 
    `pkg-config --libs glib-2.0` 

를, 컴파일러는 링커 사람들을 전달합니다. 링커는 모든 라이브러리 -l 스위치가 원본 파일을 따라갈 필요가 있도록 심볼을 왼쪽에서 오른쪽으로 오브젝트 파일 (또는이 경우에는 C 소스 파일) 가까이에서 시작하여 심볼을 처리합니다.

+0

멋진 답변을 보내 주셔서 감사합니다. 댓글 입력란은 결과를 게시하기에 충분하지 않으므로 기본 게시물에 붙여 넣습니다. –

+0

'pkg-config --libs dbus-1'과'pkg-config --libs glib-2.0' 출력은 무엇입니까? –

+0

'-L/usr/lib/x86_64-linux-gnu -ldbus-1 -lpthread -lrt'와'-L/usr/lib/x86_64-linux-gnu -lglib-2.0'을 중심으로 –

관련 문제