flyonok

统计

留言簿(7)

ACE

book

boost

bsd

c study

c++

code download

codeblock

computer clound

Eclipse

embed system

erlang

ET++

gtk

ic card

java

KDE

libevent

linux

linux--MM

mysql

network education

one card

oracle

pcap relation

php

powerbuilder

python

QT

software config

software test

SQL server

UML

wireless

wxwidgets

陈宾

阅读排行榜

评论排行榜

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为例,将其里面的包:

QUOTE:

    libX11-1.1.3-4.fc8.i386.rpm
    libX11-devel-1.1.3-4.fc8.i386.rpm
卸载。

安装以下两个rpm包,到rpm serch网站下载这两个rpm包。

QUOTE:

    libX11-1.0.3-8.fc7.i386.rpm
    libX11-devel-1.0.3-8.fc7.i386.rpm
2,自己修改java程序代码,其主要原因是:

QUOTE:

    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为例:

CODE:

    yum --enablerepo=development update libxcb
    export LIBXCB_ALLOW_SLOPPY_LOCK=1
这样就解决问题了,

CODE:

    [root@localhost ~]# rpm -qa|grep libxcb
    libxcb-1.1-1.fc9
    libxcb-devel-1.1-1.fc9
呵呵,发现fedora 9也出来了。

posted on 2008-01-15 17:31 flyonok 阅读(1283) 评论(2)  编辑 收藏 引用 所属分类: oralce

评论

# re: xcb_xlib.c:50: xcb_xlib_unlock: Assertion `c->xlib.lock failed.问题的彻底解决[未登录] 2008-05-04 21:51 john

我用了第三种方法,还是出现错误。。。  回复  更多评论   

# re: xcb_xlib.c:50: xcb_xlib_unlock: Assertion `c->xlib.lock failed.问题的彻底解决 2011-04-12 16:27 游客

我刚刚在网上找到的说明, 可以直接修改java的共享库. 我在openSUSE10.3上测试通过.

方法是这样的:

首先找到你系统里java的libmawt.so (或libawt.so) 的地址, 可能会在java/lib/i386/之类的位置, 进入到该目录, 然后执行下面的命令
# sed -i 's/XINERAMA/FAKEEXTN/g' libmawt.so

  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理