2012-07-18 16 views
14

पर सी प्रोजेक्ट के साथ जीटीके 3 को संकलित और लिंक करना मुझे विश्वास है कि यह एक डुप्लिकेट प्रश्न नहीं है, मैंने इस प्रश्न को पोस्ट करने से पहले सभी प्रश्न/उत्तर देखे हैं। मुझे लगता है कि मेरे पास एक अलग स्थिति है।उबंटू

मैं उबंटू 12.04 का उपयोग करता हूं और जीटीके 2 और 3 डाउनलोड करता हूं। मैंने गनोम की वेबसाइट से एक साधारण जीटीके स्रोत कोड कॉपी किया है। लेकिन जब मैं टर्मिनल में इस आदेश का उपयोग करें:

hello.c:(.text+0x17): undefined reference to `gtk_init' 
hello.c:(.text+0x23): undefined reference to `gtk_window_new' 
hello.c:(.text+0x47): undefined reference to `gtk_main_quit' 
hello.c:(.text+0x5b): undefined reference to `g_signal_connect_data' 
hello.c:(.text+0x67): undefined reference to `gtk_widget_show' 
hello.c:(.text+0x6c): undefined reference to `gtk_main' 
यहाँ

मेरी कोड है::

gcc `pkg-config --cflags --libs gtk+-3.0` hello.c -o hello 

मैं इस मिल

#include <gtk/gtk.h> 

int 
main (int argc, 
char *argv[]) 
{ 
    GtkWidget *window; 

    gtk_init (&argc, &argv); 

    window = gtk_window_new (GTK_WINDOW_TOPLEVEL); 

    g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL); 

    gtk_widget_show (window); 

    gtk_main(); 

    return 0; 
} 

यदि त्रुटियों दिखाई देती हैं क्योंकि मेरे पास है मैं निश्चित नहीं हूं जीटीके + या दो के दो संस्करण। मैं उबंटू/लिनक्स में अनुप्रयोग विकास में बेहद नौसिखिया हूं।

+4

संकलित 'के रूप में जीसीसी hello.c $ (pkg-config --cflags --libs जीटीके + -3.0) -ओ hello' यानी libs से पहले स्रोत –

+0

हे भगवान, यह काम किया। बहुत बहुत धन्यवाद। क्या आप उत्तर के रूप में चिह्नित करने के लिए कृपया अपना उत्तर नीचे डाल सकते हैं। – Anwar

उत्तर

22

आपको पुस्तकालयों से पहले gcc hello.c $(pkg-config --cflags --libs gtk+-3.0) -o hello के रूप में दिखाई देने वाली स्रोत फ़ाइल के साथ संकलित करना चाहिए, लिंकर का व्यवहार होने का कारण i.e यह पुस्तकालयों को तब तक लिंक नहीं करता जब तक कि उस लाइब्रेरी के प्रतीकों को संकलन में पहले देखा न जाए।
आशा है कि इससे मदद मिलती है!

+0

+1, बिल्कुल! नए जीसीसी/binutils संस्करणों के काफी अजीब और निष्पादन व्यवहार। –

+4

@ एच 2CO3: हाँ सर (/ महोदया)! और यह भी एसओ पर काफी लोकप्रिय सवाल है :) –

-1

आप भी अपनी परियोजना में सीधे जीटीके पुस्तकालय शामिल हो सकते हैं:

  1. ग्रहण में विस्तार: परियोजना> गुण> C/C++> सेटिंग> उपकरण सेटिंग का निर्माण> क्रॉस जीसीसी लिंकर> पुस्तकालय
  2. सेट करें: "Libgtk-n.so" फ़ाइल करने के लिए पथ के लिए लाइब्रेरी खोज पथ (-L), n के साथ आपके संस्करण के रूप में। लुबंटू पर स्थापित करने के बाद (libttk-3-dev इंस्टॉल करें) यह मेरे लिए "/ usr/lib/x86_64-linux-gnu /" था।
  3. तो पुस्तकालय (एल) के लिए जोड़ें: जीटीके-एन