2013-05-16 12 views
5

से जोड़ने के लिए और यह मुझ पर निम्न त्रुटि फेंकताकैसे उदाहरण मैं GLFW3 उपयोग करने के लिए कोशिश कर रहा हूँ के लिए एक अज्ञात पुस्तकालय

x11_init.c:-1: error: undefined reference to `XIQueryVersion'.

मैं केवल पता है कि यह X11 के साथ कुछ है, लेकिन मैं कैसे पता चलेगा कि जो पुस्तकालय मुझे लिंक करना है? आप इस समस्या से कैसे निपटेंगे?

+7

मैं गूगल में XIQueryVersion' टाइप 'होगा। –

+1

फ़ोरम, प्रलेखन, Google, विकी;) – gaussblurinc

उत्तर

5

आप nm इस्तेमाल कर सकते हैं जो एक अपने लापता प्रतीक होता है पता लगाने के लिए आदेश में प्रतीकों प्रणाली पुस्तकालयों में परिभाषित सूची:

find /usr/lib/ -type f -name \*.a \ 
    -exec nm -gAC --defined-only {} 2> /dev/null \; \ 
    | grep \ XIQueryVersion 

कौन सा आउटपुट:

/usr/lib/x86_64-linux-gnu/libXi.a:XIQueryVersion.o:00000110 T XIQueryVersion 

फिर आपको पता है कि आपको libXi.a लिंक करना है, बेशक आप लाइब्रेरी पथ और प्रतीक नाम को समायोजित कर सकते हैं, और यह केवल तभी काम करेगा यदि आपके पास पहले से ही आपके सिस्टम में सही लाइब्रेरी है ।

5

मैं इस क्रम में आगे बढ़ना होगा:

  1. अगर वे आपको बता जो lib इस समारोह वेब पर
  2. देखो यदि आप कर सकते हैं प्राप्त करने के लिए लिंक करने के लिए X11 डॉक में नज़र देखने के लिए देखने के लिए जो भी इस संदर्भ है X11 libs पर इस lib
  3. उपयोग nm के लिए एक संदर्भ को खोजने

(shhhhhh ... यह है libxi)

+0

ठीक है अब मुझे यह भी मिला है। मैंने सोचा कि एक तेज़ तरीका होगा। धन्यवाद। –

1

मैं समान जोड़ने त्रुटियों हो रही थी। मेरे त्रुटि कह रहे थे:

/usr/local/lib/libglfw3.a(x11_init.c.o): In function `initExtensions': 
x11_init.c:(.text+0x16d3): undefined reference to `XIQueryVersion' 
/usr/local/lib/libglfw3.a(x11_window.c.o): In function `createWindow': 
x11_window.c:(.text+0x6de): undefined reference to `XISelectEvents' 

लेकिन चूंकि मैं CMake जोड़ने झंडे आवश्यक जोड़ने libs के लिए करना चाहता था, यह मेरे कुछ समय लिया ऐसा करने के लिए। बाहरी libs आवश्यक, glfw आधारित कार्यक्रम को संकलित करने, कर रहे हैं:

Requires.private: x11 xrandr xi xxf86vm gl 

This धागा इन libs glfw आधारित कार्यक्रम संकलन करने के लिए आवश्यक लगाने के लिए कैसे पता चलता है।

, जब से मैं 2-3 घंटे बिताए CMake ऊपर अतिरिक्त जोड़ने libs के लिए झंडे को जोड़ने के लिए देख। मुझे लगता है कि दूसरों की मदद करने के लिए यहां उल्लेख करना उचित है।

मुख्य रूप से मैंने ऊपर वर्णित त्रुटि के लिए, मुझे केवल xi के लिए एक सेमेक लिंकिंग ध्वज की आवश्यकता है, लेकिन पूर्णता के लिए मैं उन सभी के लिए उल्लेख कर रहा हूं, यानी x11 xrandr xi xxf86vm। यहाँ मेरी CMakeLists.txt फ़ाइल से टुकड़ा है:

include_directories(
    ./src 
    ${X11_xf86vmode_INCLUDE_PATH} 
    ${X11_Xrandr_INCLUDE_PATH} 
    ${X11_Xinput_INCLUDE_PATH} 
) 

    target_link_libraries(
     ${GLFW_LIBRARIES} 
     ${X11_LIBRARIES} 
     ${X11_Xxf86vm_LIB} 
     ${X11_Xrandr_LIB} 
     ${X11_Xinput_LIB} 
    ) 

मैं इस link से इन झंडे निकाले। आशा है, यह दूसरों के लिए समय बचाएगा। का आनंद लें!

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

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