2012-04-21 13 views
5

मैं एक कस्टम जीटीके मॉड्यूल बनाना चाहता हूं जिसे जीटीके एप्लीकेशन शुरू करते समय लोड किया जाना चाहिए।जीटीके मॉड्यूल कैसे बनाएं और लोड करें?

इस विषय पर दस्तावेज़ीकरण दुर्लभ है, मैंने बहुत कुछ खोजा लेकिन मैं इसे चलाने में विफल रहा। मैं GTK3 साथ उबंटू लिनक्स पर हूँ और sofar की कोशिश की:

  • संकलित और विधि void gtk_module_init(gint *argc, gchar ***argv[]) अंदर के साथ एक साझा पुस्तकालय जुड़े। जहां तक ​​मैं समझ गया, यह एक साधारण मॉड्यूल बनाने के लिए पर्याप्त होना चाहिए। पूर्ण कोड:
#include <iostream> 
#include <gtk/gtk.h> 

void gtk_module_init(gint *argc, gchar ***argv[]) { 
    std::cout << "huhu" << std::endl; 
} 
  • एक आवेदन शुरू करने के /usr/lib/x86_64-linux-gnu/gtk-3.0/modules/libtest-gtk-module.so
  • कोशिश में इस lib रखो इस तरह: gnomine --gtk-module=libtest-gtk-module.so लेकिन सब मुझे मिलता है: Gtk-Message: Failed to load module "libtest-gtk-module.so"

तो और क्या आदेश जीटीके इस लाइब्रेरी लोड करने के लिए में किया जा सकता है?

अग्रिम में बहुत धन्यवाद!

उत्तर

2

आपको सिस्टम को लाइब्रेरी से अवगत कराने की आवश्यकता है। सिस्टम निर्देशिका में लाइब्रेरी के लिए, यह रूट के रूप में ldconfig को चलाने के लिए पर्याप्त होना चाहिए। ट्यूटोरियल here पर एक नज़र डालें।

  • इस के बाद से किया गया है सी ++ कोड, तुम बनाने की जरूरत है सुनिश्चित करें कि समारोह नाम घायल का नाम नहीं है::

    [संपादित करें]

    मैं इस प्रकार लोड करने के लिए मॉड्यूल मिला

    extern "C" { 
    void gtk_module_init(gint *argc, gchar ***argv[]) { 
        std::cout << "huhu" << std::endl; 
    } 
    } 
    
  • मैं के साथ इसे बनाया निम्नलिखित:

    g++ -fPIC -shared -Wl,-soname,libfoo.so.1 -olibfoo.so.1.0.1 `pkg-config --libs --cflags gtk+-3.0` t.c 
    
  • मैं एक निरपेक्ष पथ का इस्तेमाल किया ldconfig साथ खिलवाड़ से बचने के लिए, यह शायद थोड़ी देर के मॉड्यूल के विकास करने का सबसे अच्छा बात है:

    ~$ gedit --gtk-module=/home/eric/libfoo.so.1.0.1 t.c 
    huhu 
    

यह टकसाल LMDE, नहीं Ubuntu पर है, लेकिन मैं डॉन यह महत्वपूर्ण नहीं लगता है।

+0

ठीक है, मैंने कोशिश की। लेकिन बिना किसी सफलता के। शायद मॉड्यूल में कुछ गलती है? जीटीके द्वारा प्रदान की गई त्रुटि बहुत उपयोगी नहीं है ... और लिंक के लिए धन्यवाद, यह अपेक्षाकृत उपयोगी लगता है! – Simme

+0

+1 @ सिमेम: कृपया संपादन की जांच करें। सबसे अधिक संभावना है कि आपकी समस्या नाम के मुद्दे के साथ थी। आप 'readelf' या ऐसी अन्य उपयोगिताओं का उपयोग यह जांचने के लिए कर सकते हैं कि' gtk_module_init' (जैसा कि w/o कोई उपसर्ग/प्रत्यय i.e. mangling है) प्रतीक मौजूद है –

0

strace के साथ इसे चलाने के लिए प्रयास करें:

strace -eopen add_your_command_here 2>&1 | grep libtest-gtk-module.so 

आप पता लगा लेंगे जहां अपने कार्यक्रम उस फ़ाइल के लिए लग रही है।

संबंधित मुद्दे