caution:以下情景发生在fedora7.0中,如果你用的是其他操作系统,欢迎对号入座,但作者不负任何责任
那天想玩无冬之夜却突然出来这么个东西:
xcb_xlib.c:50: xcb_xlib_unlock: Assertion `c->xlib.lock' failed.
巨不爽。上网一搜竟然到处都是这个错误,搞到连java的图形库和vmware都死在libxcb手下。有人知道这是什么东东吗?有人知道吗?没人知道吗?……
正解:
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位程序的话……建议等“按标准设计”的新版程序出来再说。
而我的Linux版无冬之夜是不大可能出补丁的啦。

