の16.04を使用してあなたは、アプリ関連のグラフィックスを開発しました。あなたのアプリケーションは、xorg.conf(Xサーバー構成ファイル)に機能的に依存しています。 Xサーバーは、ディスプレイグラフィックスハードウェアに基づいた表示ウィンドウです。
同じアプリを別のコンピュータで実行しようとすると、以前のコンピュータで使用していたのと同じ設定が読み込まれます。どのコンピュータもxconf.orgファイルは/etc/x11/xconf.orgにあります。新しいコンピュータには、xconf.orgから情報を読み取ることができますが、すべての情報を読むことはできません。それが部分的に働いている理由です。
あなたのグラフィックスカードがあなたのXサーバを拡張します。したがって、グラフィックスドライバをインストールしたことに基づいて、構成はxconf.orgに追加され続けます。しかし、グラフィックスカードを持たないコンピュータにもxconf.orgが表示されます。
下記のXサーバー接続(有限状態マシン)用のFSMがあります。あなたのケースでは、何かを表示しているので_xcb_outが起こっています。しかし、適切な_xcb_in(XCB入力)または_xcb_ext(XCB拡張)が正しくありません。
このエラーの原因は正確にはわかりません。しかし、FSMは、さまざまなコンテキストに基づいて、高度なマシンです。 XCB接続設定を完了するには、設定ファイルのチャネルを検索します。あなたのケースでは、XCB接続にエラーがあるため、XCBのセットアップは実行できません。すべてのXサーバディスプレイにおいて
、最初に、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/
だから、ここソリューションは何ですか? QTは、デフォルトでコンパイル時にダイナミックリンクを使用します。静的なリンクを使用すると、実行可能パッケージには実行に必要なすべてのライブラリが保持され、実行したい場所で実行することができます。したがって、古いマシンでは、静的リンクを使用してコンパイルしてください。それはタールのような何かのパッケージを作り出します。あなたは別のコンピュータにそのtarをインストールする必要があります。実行する必要があります。
QTは、デフォルトでは、動的リンクを使用しています:あなたは静的リンクにQTを変更するにはどうすればよい 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?
いるのQtのライブラリに対して? – Jeka
あなたの展開をチェックしましたかhttp://doc.qt.io/qt-5/linux-deployment.html? – Jeka
lXiにリンクする lX11 lGL lglut lGLU lpython2.7 – JLev