xcb_xlib.c:50: xcb_xlib_unlock: Assertion `c->xlib.lock failed.问题的彻底解决

安装一些java软件,经常发现“xcb_xlib.c:50: xcb_xlib_unlock: Assertion `c->xlib.lock failed.”类似错误,包括最近的SuSE10.x、Fedora8以及Ubuntu7.x系统,网上文章到处贴,一共提出了两种观点:
1,倒退回FC7的libx11,
卸载以下两个包的时候,可能有依赖问题无法卸载,在后面添加 --nodeps 参数强制卸载,以fedora 8为例,将其里面的包:
libX11-1.1.3-4.fc8.i386.rpm
libX11-devel-1.1.3-4.fc8.i386.rpm
卸载。

安装以下两个rpm包,到rpm serch网站下载这两个rpm包。
libX11-1.0.3-8.fc7.i386.rpm
libX11-devel-1.0.3-8.fc7.i386.rpm
2,自己修改java程序代码,其主要原因是:

The libxcb package provides an interface to the X Window System protocol, which replaces the current Xlib interface. Xlib can also use XCB as a transport layer, allowing software to make requests and receive responses with both.

从linuxfromscratch.org上面找到的说明,竟然是xlib的界面换到xcb库里了,而设计xcb的牛人们又严格得紧,非要在某个源文件 的第50行加一个assertion,弄得从前“不按标准设计”的程序都运行不了啦……我只是没想到java的swing库也是其中之一……

解决方法嘛,直接在libxcb的源码里把那个assert注释掉然后重新编译再安装就行了,又或者在编译的时候给gcc加个-DNDEBUG选项。注意 如果用源码安装的话是会损害之前安装的版本的(无法通过删除复原)……所以,如果你像我一样是软件包主义者,不希望让自己都没办法记得放在哪的软件污染你 的运行环境的话……又或者在用一个64位的系统,但是又要运行32位程序的话……建议等“按标准设计”的新版程序出来再说。


3,以上是网上搜集的办法,其实早在yum库的最新development中就有了更新的libcx包,仍然以fedora 8为例:
yum --enablerepo=development update libxcb
export LIBXCB_ALLOW_SLOPPY_LOCK=1
这样就解决问题了,
[root@localhost ~]# rpm -qa|grep libxcb
libxcb-1.1-1.fc9
libxcb-devel-1.1-1.fc9
呵呵,发现fedora 9也出来了。




Monthly Archives

Pages

Powered by Movable Type 7.7.2

About this Entry

This page contains a single entry by Cnangel published on November 26, 2007 11:30 PM.

编译源码-FAQ was the previous entry in this blog.

抓取url的超链接程序(使用到libcurl和libxml2) is the next entry in this blog.

Find recent content on the main index or look in the archives to find all content.