2

X11R5 ライブラリを 32 ビット Fedora Core 9 マシンで静的にビルドしました。次に、X11 を使用するアプリを作成し、静的にリンクしました。ここまでは順調ですね。ldd は、静的にリンクされたアプリであると報告しています。ローカルで問題なく実行できます。しかし、それを 64 ビット FC9 マシンにコピーすると、次のように失敗します。

Assistant.static: xcb_io.c:228: _XSend: アサーション `!dpy->xcb->request_extra' が失敗しました。
中止しました

strace を実行すると、libXfixes.so を開こうとしているようです。

...
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/lib/libXfixes.so", O_RDONLY)     = -1 ENOENT (No such file or directory)
open("/usr/lib/libXfixes.so", O_RDONLY) = -1 ENOENT (No such file or directory)
munmap(0xf7bf9000, 123447)              = 0
open("libXfixes", O_RDONLY)             = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY)      = 8
fstat64(0x8, 0xff86a9e8)                = 0
mmap2(NULL, 123447, PROT_READ, MAP_PRIVATE, 8, 0) = 0xfffffffff7bf9000
close(8)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/lib/libXfixes", O_RDONLY)        = -1 ENOENT (No such file or directory)
open("/usr/lib/libXfixes", O_RDONLY)    = -1 ENOENT (No such file or directory)
munmap(0xf7bf9000, 123447)              = 0
open("libXfixes.so.4", O_RDONLY)        = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY)      = 8
fstat64(0x8, 0xff86a9e8)                = 0
mmap2(NULL, 123447, PROT_READ, MAP_PRIVATE, 8, 0) = 0xfffffffff7bf9000
close(8)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/lib/libXfixes.so.4", O_RDONLY)   = -1 ENOENT (No such file or directory)
open("/usr/lib/libXfixes.so.4", O_RDONLY) = -1 ENOENT (No such file or directory)
munmap(0xf7bf9000, 123447)              = 0
open("libXfixes", O_RDONLY)             = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY)      = 8
fstat64(0x8, 0xff86a9e8)                = 0
mmap2(NULL, 123447, PROT_READ, MAP_PRIVATE, 8, 0) = 0xfffffffff7bf9000
close(8)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/lib/libXfixes", O_RDONLY)        = -1 ENOENT (No such file or directory)
open("/usr/lib/libXfixes", O_RDONLY)    = -1 ENOENT (No such file or directory)
munmap(0xf7bf9000, 123447)              = 0
write(2, "assistant.static: xcb_io.c:228: "..., 85assistant.static: xcb_io.c:228: _XSend: Assertion `!dpy->xcb->request_extra' failed.

静的にリンクされたアプリケーションが共有 X ライブラリを開こうとする理由がわかりません。アプリを実行するために必要なすべてが静的リンクを介して含まれているべきではありません (もちろん、外部で処理する必要がある、アプリが行う Linux システム呼び出しは除きます)。

説明をありがとう!

4

3 に答える 3

1

私は同じ問題を抱えているようで、これに関する最もクールなハックを見つけました! 問題は、libXcursor.so.1 を読み込もうとしているだけで、libX11 とすべての友人もドラッグしてしまうことです。

私の解決策: EXE を編集し、libXcursor.so.1 または libXfixes.so を libREMOVED.so または同じ # 文字の名前に変更します。次に、これらのオプションの拡張機能のロードをスキップします。

于 2013-06-21T02:15:33.323 に答える
0

X11 はライブラリを動的にロードしますが、32 ビット バージョンではなく 64 ビット ライブラリをロードしている可能性があります。

プラグインやドライバーをロードするときのように、実行時にモジュールをロードするのは普通のことです。また、モジュールは X11 自体に動的にリンクされているため、混乱することになります。

個人的には、X11 を静的にリンクすることはできませんでした。本当に必要なのでしょうか?

于 2010-07-17T03:33:24.410 に答える