2011-04-22 26 views
6

Tôi đang cố gắng biên dịch chương trình C, với các tiêu đề này: http://pastebin.com/SppCXb0U, trên Ubuntu. Lúc đầu, tôi không có bất kỳ may mắn chút nào, nhưng sau khi đọc về pkg-config Tôi crafted dòng này:Soạn thảo chương trình C với các tệp tiêu đề dbus

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

Tuy nhiên, nó vẫn không hoạt động và mang lại cho tôi lỗi này:

/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 

Tôi không biết phải làm gì từ đây.

==================================

Một lời giải thích hay - cảm ơn bạn. Tuy nhiên, tôi không thể làm cho nó hoạt động. Chạy lệnh của bạn ở trên (có thêm) sẽ mang lại kết quả sau

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 

Trả lời

12

Vấn đề của bạn không phải với tệp tiêu đề, vấn đề của bạn là với thư viện; khiếu nại về "tài liệu tham khảo không xác định" thường đến từ mối liên kết. Bạn cần phải đặt các tùy chọn cấu hình thư viện sau file nguồn:

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` 

Tùy chọn --libs sẽ sản xuất một loạt các -l cờ cho trình biên dịch, trình biên dịch sẽ vượt qua những mối liên kết đến. Trình liên kết sẽ giải quyết các ký hiệu từ trái sang phải bắt đầu với tệp đối tượng (hoặc, đủ gần trong trường hợp này, tệp nguồn C) để tất cả các công tắc thư viện -l cần theo dõi tệp nguồn của bạn.

+0

Cảm ơn bạn rất nhiều vì câu trả lời hay của bạn. Trường nhận xét không đủ lớn để đăng kết quả của tôi, vì vậy tôi đã dán nó vào bài đăng chính. –

+0

Đầu ra 'pkg-config --libs dbus-1' và 'pkg-config --libs glib-2.0' là gì? –

+0

'-L/usr/lib/x86_64-linux-gnu -ldbus-1 -lọc trước -lrt' và' -L/usr/lib/x86_64-linux-gnu -lglib-2.0' tôn trọng –