Я построил X11R5 libs статически на 32-разрядной машине Fedora Core 9. Затем я создал приложение, которое использует X11 и связывает его статически. Все идет нормально. ldd сообщает, что это статически связанное приложение. Я могу запустить его локально просто отлично. Но когда я копирую его на 64-разрядную машину FC9, он не работает следующим образом:Почему статические приложения X11 не работают на других машинах?
assistant.static: xcb_io.c: 228: _XSend: Утверждение `! Dpy-> xcb-> request_extra 'не выполнено.
Прерванного
Когда я бег Трассирования, кажется, пытаются открыть 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 LIBS , Если все, что необходимо для запуска приложения, должно быть включено через статическое связывание (за исключением, конечно, любых системных вызовов Linux, создаваемых приложением, которые необходимо обрабатывать извне).
Спасибо за любые объяснения!
Это приложение, которое выдается клиентам, которые могут быть в разных вариантах Linux. Поэтому целью является минимизация сборок. Другие приложения, не основанные на X11, не сталкиваются с проблемой статического старта во многих вариантах Linux, но, возможно, это не относится к приложениям на базе X11. –
@Dave Wade-Stein Да, я понимаю. Я также отправляю закрытый источник на Linux - это боль. Я никогда не отправляю статические двоичные файлы - также из-за лицензионных ограничений на библиотеки.Вы можете проверить этот вопрос и ответить: http://stackoverflow.com/questions/3214168/linking-static-with-glibc-and-libstdc/3214232#3214232 Решение для меня: динамически связывать и настраивать Linux Standard База. –