Ty opracowany grafiki związane aplikację. Twoja aplikacja jest funkcjonalnie zależna od pliku xorg.conf (plik konfiguracyjny serwera X). X serwer to okna wyświetlacza, które opierają się na twoim sprzęcie do wyświetlania grafiki.
Podczas próby uruchomienia na tym samym komputerze tej samej aplikacji, użytkownik chce przeczytać tę samą konfigurację, którą miał na starym komputerze. Ponieważ każdy komputer ma plik xconf.org znajdujący się w /etc/x11/xconf.org. Na nowym komputerze komputer może czytać informacje z xconf.org, ale nie może odczytać wszystkich informacji. Dlatego częściowo działa.
Twoja karta graficzna ulepsza twój serwer X. Tak więc konfiguracja stale dodaje na twoim xconf.org na podstawie instalacji sterownika karty graficznej. Ale komputer bez karty graficznej ma także xconf.org do wyświetlania.
Poniżej znajduje się FSM dla połączenia z serwerem X (maszyna skończonego stanu). W twoim przypadku występuje _xcb_out happening - ponieważ coś wyświetla. Ale właściwe _xcb_in (wejście XCB) lub _xcb_ext (rozszerzenie XCB) nie jest poprawne.
Nie mogę dokładnie powiedzieć, co powoduje ten błąd. Ale FSM jest zaawansowaną maszyną, opartą na różnych kontekstach w różny sposób. Przeszukują kanały plików konfiguracyjnych, aby zakończyć konfigurację połączenia XCB. W twoim przypadku połączenie XCB zawiera błąd, więc konfiguracja XCB nie może się zdarzyć.
W każdym wyświetlacza serwera X, na pierwszym, istnieje potrzeba, aby zakończyć połączenie z serwerem X i po wystąpieniu, że dalsze przetwarzanie.
Spójrz na poniższy kod z Wikipedii: 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;
}
Oto link, który można badać więcej: https://xcb.freedesktop.org/tutorial/
Więc, co jest rozwiązaniem tutaj? QT domyślnie używa dynamicznego łączenia podczas kompilacji. Jeśli korzystasz z łączenia statycznego, pakiet wykonywany zawiera wszystkie biblioteki niezbędne do uruchomienia, a zatem w dowolnym miejscu, które chcesz uruchomić, możesz uruchomić. Tak więc, na starym komputerze, kompiluj używając statycznego linkowania. Tworzy coś w rodzaju pakietów takich jak tar. Musisz zainstalować ten program na swoim komputerze. Powinien działać.
QT, domyślnie wykorzystuje dynamiczne łączenie: Does Qt creator by default statically or dynamically link it's libraries?
Jak można zmienić QT do linkowania statycznego:How to make Qt and Qtcreator link the libraries statically instead of dynamic?
Przeciwko jakiej biblioteki Qt jesteś łączącej w pliku pro? – Jeka
Czy sprawdziłeś swoje wdrożenie http://doc.qt.io/qt-5/linux-deployment.html? – Jeka
Łączenie z lXi lX11 lGL lglut lGLU lpython2.7 – JLev