2017-07-17 12 views
5

मैं अपने क्यूटी एप्लिकेशन को एक अलग कंप्यूटर पर चलाने की कोशिश कर रहा हूं (यह पूरी तरह से मेरा काम करता है, जहां मैंने इसे विकसित किया)।एक्ससीबी त्रुटि: 148 - क्यूटी अनुप्रयोग प्रदर्शित करता है

QXcbConnection: XCB error: 148 (Unknown), sequence: 175, resource id: 0, major code: 140 (Unknown), minor code: 20

मेरे कार्यक्रम शुरू होता है, और सब कुछ ठीक लग रहा है, लेकिन मैं अजीब व्यवहार देखते हैं जब मैं इसे चलाने जब प्रदर्शन से सहभागिता (कुछ रंग आदेशों कर रहे हैं - जब मैं टर्मिनल के माध्यम से इस आवेदन शुरू, मैं इस त्रुटि मिलती है निष्पादित नहीं किया जा रहा है, जो मेरे ऐप के लिए महत्वपूर्ण है)।

मैंने इस त्रुटि की खोज करने की कोशिश की है और मुझे अब तक कोई समाधान नहीं मिल रहा है। क्या तुम्हारे पास कोई सुझाव है?

ubuntu का उपयोग करते हुए 16.04, Nvidia 1050 GTX GPU के साथ

+0

क्यूटी की जो पुस्तकालय के खिलाफ आप अपने समर्थक फ़ाइल में लिंक कर रहे हैं? – Jeka

+0

और क्या आपने अपनी तैनाती http://doc.qt.io/qt-5/linux-deployment.html की जांच की? – Jeka

+0

lglut Lxi lX11 LGL से लिंक करना lGLU lpython2.7 – JLev

उत्तर

3

आप संबंधित अनुप्रयोग ग्राफिक्स का विकास किया। आपका ऐप आपके xorg.conf (एक्स सर्वर कॉन्फ़िगरेशन फ़ाइल) में कार्यात्मक रूप से निर्भर है। एक्स सर्वर आपकी डिस्प्ले विंडोज़ है, जो आपके डिस्प्ले ग्राफिक्स हार्डवेयर पर आधारित है।

जब आपने एक ही ऐप को अलग-अलग कंप्यूटर में चलाने की कोशिश की, तो वह आपके पुराने कंप्यूटर पर उसी कॉन्फ़िगरेशन को पढ़ना चाहता है। चूंकि प्रत्येक कंप्यूटर में xconf.org फ़ाइल /etc/x11/xconf.org में स्थित है। नए कंप्यूटर पर, कंप्यूटर xconf.org से जानकारी पढ़ सकता है, लेकिन यह सभी जानकारी नहीं पढ़ सकता है। यही कारण है कि यह आंशिक रूप से काम कर रहा है।

आपका ग्राफिक्स कार्ड आपके एक्स सर्वर को बढ़ाता है। इसलिए, आपके xconf.org पर कॉन्फ़िगरेशन आपके द्वारा ग्राफ़िक्स ड्राइवर स्थापित करने के आधार पर जोड़ता रहता है। लेकिन, ग्राफिक्स कार्ड के बिना कंप्यूटर के प्रदर्शन के लिए xconf.org भी है।

नीचे एक्स सर्वर कनेक्शन (परिमित राज्य मशीन) के लिए एफएसएम है। आपके मामले में, _xcb_out हो रहा है - क्योंकि यह कुछ प्रदर्शित कर रहा है। लेकिन, उचित _xcb_in (एक्ससीबी इनपुट) या _xcb_ext (एक्ससीबी एक्सटेंशन) सही नहीं है।

मैं बिल्कुल नहीं बता सकता, जो इस त्रुटि का कारण बन रहा है। लेकिन, एफएसएम उन्नत मशीन है, विभिन्न संदर्भों के आधार पर विभिन्न तरीकों के आधार पर। वे XCB कनेक्शन सेटअप को पूरा करने के लिए कॉन्फ़िगरेशन फ़ाइलों के चैनलों को खोजते हैं। आपके मामले में एक्ससीबी कनेक्शन में त्रुटि है, इसलिए एक्ससीबी सेटअप नहीं हो सकता है।

enter image description here

हर X सर्वर प्रदर्शन में, पहली बार में, वहाँ एक्स सर्वर कनेक्शन को पूरा करने और उसके बाद आगे की प्रक्रिया होती है की जरूरत है। विकिपीडिया से नीचे दिए गए कोड में

देखो: https://en.wikipedia.org/wiki/XCB

#include <xcb/xcb.h> 
#include <stdio.h> 
#include <stdlib.h> 

int main(void) 
{ 
    xcb_connection_t *c; /* connection character */ 
    xcb_screen_t  *s; 
    xcb_window_t   w; 
    xcb_gcontext_t  g; 
    xcb_generic_event_t *e; 
    uint32_t    mask; 
    uint32_t    values[2]; 
    int     done = 0; 
    xcb_rectangle_t  r = { 20, 20, 60, 60 }; 

         /* open connection with the server */ 
    c = xcb_connect(NULL,NULL); 
    if (xcb_connection_has_error(c)) { 
    printf("Cannot open display\n"); 
    exit(1); /* you returned from here, no further processing */ 
    } 
         /* get the first screen */ 
    s = xcb_setup_roots_iterator(xcb_get_setup(c)).data; 

         /* create black graphics context */ 
    g = xcb_generate_id(c); 
    w = s->root; 
    mask = XCB_GC_FOREGROUND | XCB_GC_GRAPHICS_EXPOSURES; 
    values[0] = s->black_pixel; 
    values[1] = 0; 
    xcb_create_gc(c, g, w, mask, values); 

         /* create window */ 
    w = xcb_generate_id(c); 
    mask = XCB_CW_BACK_PIXEL | XCB_CW_EVENT_MASK; 
    values[0] = s->white_pixel; 
    values[1] = XCB_EVENT_MASK_EXPOSURE | XCB_EVENT_MASK_KEY_PRESS; 
    xcb_create_window(c, s->root_depth, w, s->root, 
        10, 10, 100, 100, 1, 
        XCB_WINDOW_CLASS_INPUT_OUTPUT, s->root_visual, 
        mask, values); 

         /* map (show) the window */ 
    xcb_map_window(c, w); 

    xcb_flush(c); 

         /* event loop */ 
    while (!done && (e = xcb_wait_for_event(c))) { 
    switch (e->response_type & ~0x80) { 
    case XCB_EXPOSE: /* draw or redraw the window */ 
     xcb_poly_fill_rectangle(c, w, g, 1, &r); 
     xcb_flush(c); 
     break; 
    case XCB_KEY_PRESS: /* exit on key press */ 
     done = 1; 
     break; 
    } 
    free(e); 
    } 
         /* close connection to server */ 
    xcb_disconnect(c); 

    return 0; 
} 

यहाँ है कि आप अधिक शोध कर सकते हैं लिंक: https://xcb.freedesktop.org/tutorial/

तो, यहाँ समाधान है? क्यूटी, डिफ़ॉल्ट रूप से, संकलन करते समय गतिशील लिंकिंग का उपयोग करता है। यदि आप स्थैतिक लिंकिंग का उपयोग करते हैं, तो निष्पादन योग्य पैकेज चलाने के लिए आवश्यक सभी पुस्तकालयों को रखता है, और इस प्रकार, कहीं भी, आप दौड़ना चाहते हैं, आप दौड़ सकते हैं। तो, अपनी पुरानी मशीन में, स्थिर लिंकिंग का उपयोग करके संकलित करें। यह टैर जैसे कुछ पैकेज तैयार करता है। आपको उस टैर को अपने अलग कंप्यूटर में स्थापित करना होगा। इसे चलाना चाहिए

क्यूटी, डिफ़ॉल्ट रूप से, गतिशील जोड़ने का उपयोग करता है: Does Qt creator by default statically or dynamically link it's libraries?

तुम कैसे स्थिर जोड़ने के लिए क्यूटी बदल सकते हैं:How to make Qt and Qtcreator link the libraries statically instead of dynamic?

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