|
发表于 2007-10-24 20:00:54
|
显示全部楼层
这是因为系统上安装了xcb库造成的.
那么xcb是什么东西呢?
X protocol C-language Binding (xcb) 是用来取代 xlib , 且提供 transport layer 让尚未修改的程式使用 ( Xlib/XCB ). 如果原本使用 xlib 的程式沒有照規矩來, 就會發生 assertion. JRE , vmware 這些程序都有使用xcb库,要避免出错出错主要有两个办法:
一個是退回 xlib ,
另外一個就是自己編譯XCB, 把 assert 檢查拿掉.
编译时要手动修改源文件,重點是 src/xcb_xlib.c 的第 41 , 50 行的 assert 都註解掉. 我參考 archlinux 的 patch , 把 assert 換成 if . 如下:
void xcb_xlib_lock(xcb_connection_t *c)
{
_xcb_lock_io(c);
// assert(!c->xlib.lock);
if (!c->xlib.lock) {
c->xlib.lock = 1;
c->xlib.thread = pthread_self();
}
_xcb_unlock_io(c);
}
void xcb_xlib_unlock(xcb_connection_t *c)
{
_xcb_lock_io(c);
// assert(c->xlib.lock);
if (c->xlib.lock) {
assert(pthread_equal(c->xlib.thread, pthread_self()));
c->xlib.lock = 0;
pthread_cond_broadcast(&c->xlib.cond);
}
_xcb_unlock_io(c);
}
安裝之後, java, vmware 都能執行, 雖然不知有啥缺點, 但是 java 能跑最要緊!
另外ubuntu上及时更新xcb库也可以解决此问题.
各系统的xcb库是哪个文件请各位自己判断. |
|