2009年5月12日星期二

使用gcc 4.3编译某些程序的出错问题解决

今天在ubuntu 9.04上编译sphinx的中文支持版本csft, 发现编译出错, mmseg出错, 提示找不到strncmp函数没有定义, google了一下才知道是gcc 4.3的问题, 为了加快编译速度, 那些常用的函数都必须显示包含了, 修改出错的文件加上对cstring的引用问题解决, 另外编译csft的时候, 会提示mmseg的一个头文件出错, 也必须在头文件中做类似修改, 下面是一个移植指引.
如果你编译的程序没有遵从这样的移植指引, 那么你就不得不自己去修改一下程序了.

2009年5月6日星期三

编写没有dos窗口的windows应用程序

近日需要开发一个通过网页可以启动daemon-tools挂载iso镜像的程序, 由于daemon-tools有命令行接口, 实际上只要使用一个c程序调用daemon.exe即可了. 做完之后效果不理想, 当运行时会出现一个黑的dos窗口, 严重影响用户体验, 经过google之后, 得到下面两个经验:
(1) 如果启动其他的应用程序, 使用system函数是会产生dos窗口的, 要改用WinExec程序, 在地二哥参数中传入SW_HIDE常量才可以. 另外, 应WinExec有额外的好处, 那就是它默认从它launcher程序被loader的地方寻找要启动的程序, 所以你被启动的程序可以不在系统环境路径中
(2) 如果要使得launcher程序本身没有dos窗口, 也需要一些额外的设置, 需要在程序中写下如下的编译器注释:

#pragma comment(linker,"/subsystem:\"Windows\" /entry:\"mainCRTStartup\"")

当然你用了这个之后就必须使用VC的编译器了, mingw/gcc不认这个注释.

2009年4月28日星期二

继续等待ubuntu 9.04成熟

前两天说想用9.04正式作为工作桌面了, 但是使用了两天的表现来看还是想呆在8.10下面, 使用9.04目前确实带来了启动速度的提高, 我机器上的测试是从27秒,减少到了18秒,提速30%.

但是也还是存在一些问题, 首先是双显示器的问题
(1) 使用ATI官方驱动,窗口最大化时会把两个屏幕认成一个屏幕, 所以会跨越两个屏幕, 这点非常不爽
(2) 使用开源驱动不玩游戏, 不开compiz也可以接受, 但是不知道怎么回事, 使用fvwm会搞反双屏, 或者干脆有一个屏幕起不来, 真是奇怪.

由于metacity不支持配置快捷键切换窗口屏幕, 所以平常用fvwm居多, 而上面两条问题, 会让我感觉工作巨不爽, 甚至还没有windows下双屏感觉好, 在windows下顶多只是切换屏幕低效一点, 偶尔hydravision控制软件不响应一下, 其他的感觉都还不错.

其实9.04虽然没有宣称有什么巨大的改变什么的, 但是实际上是跨越很大的一个版本, 内核升级, xorg升级, 这些"大头"的升级在各个版本上甚至都造成了问题, 我也是从Arch上遇到问题改回到ubuntu, 现在这些我以前遇到的问题在9.04上虽然有所改善, 但是还不够, 所以继续我的8.10吧!

另外, 最近的很多业余时间都花在配置系统上了, 这样是不对的, 使用好的操作系统的目的是为了加速工作, 提醒下自己不能本末倒置了!

2009年4月26日星期日

使用metacity内置的符合特性

说道窗口特效, 都会想当然的是compiz, 在ubuntu, 说道要开窗口特效,那么在桌面效果中开放, 可是日常工作中,并没有对特效有那么高的要求,而只想有个窗体阴影和透明, 有时候是显卡或者驱动不支持,比如我现在使用ubuntu 9.04就无法在双屏下开窗口特效, 这样本来也没有什么, 不过看着那个使用频率最高的gnome-do, 默认的那个很丑的界面, 心里总不是个滋味, 而皮肤选择要在符合窗口管理器打开的前提下才能使用,我原来也想当然的认为要开compiz, 心想这个没有戏了,必须承受这样的状况了。今天突然想到,以前看过一条文章,metacity在早几个版本就支持复合特性了,那么这个复合特性是不是gnome-do要求的符合特性呢?
使用配置编辑期把metacity的符合特性打开了, 嘿, 居然可以了, 很漂亮, 而且tilda也可以透明了!原来我总以为要开xcompmgr才可以开tilda透明, 原来是要用metacity的复合特性!以前在8.10中试过metacity的这个功能, 但是觉得比较卡,不好用,有时候有花屏的情况,但是在9.04中,使用开源ati驱动, 完全没有问题!^_^

163有了ubuntu 9.04的源了

这几天一直都在盼星星,盼月亮,以至于每天都上163的源看看有没有9.04的源上来,其他的源不是速度慢,就是有问题,从ovh.net移到163的源上了后,ovh.net的源速度还可以,但是昨天我使用AMD官方ATI驱动时把我的locales还有libc包搞坏了,造成升级软件包都报错,说找不到/sbin/locale-gen, locale指令也有了, 163的源,赞一个!

2009年4月25日星期六

ubuntu 9.04的一些贴心改变

首先, 替ATI显卡在ubuntu 9.04下的表现平反, 随发行版发布的的确不行, 在我这里会造成xorg cpu占有100%, 但是今天心血来潮使用了从AMD网站下载的ati-9.4版本的驱动(catalyst-8.602)发现非常好, 对双屏的支持很完美,也可以在双屏下开compiz效果,非常舒服。不过设置双屏的时候要用xrandr来做, 使用catalyst-control-center配置是不行的。它上面的相关选项为灰色不可用状态。

顺便记一下使用AMD官方驱动的方法, 以前没有搞过的

./ati-driver-installer--.run --listpkg
#follow the instrunction
#e.g for ubuntu 9.04
./ati-driver-installer--.run --buildpkg Ubuntu/jaunty
#use dpkg -i install the generated deb files.

但是还有几个欠缺就是
(1) 使用ATI驱动,驱动X时,副显示器会狂闪几秒钟才启动,而主显示器不会,这让我感觉奇怪, 也担心是否会对显示器有影响
(2) 不知道是显卡还是X的问题,窗口最大化时认为两个显示器是一个桌面,所以会最大化到两个桌面上,这让我有点抓况!
只能用拖动来改变窗口大小了。
除了广为宣传的启动迅速, 支持EXT4之外, 还有几个地方让我感觉非常舒服
(1) gnome-display-properties, 对双屏的支持增加, 可以单独设置显示器, 它应该是调用xrandr命令来做这个事情,但是目前用起来还是有点不顺,比如设置无法保存, 设置不对的问题, 还需要改进。
(2) 在language support中, gnome界面菜单等希望用英文,而核心语言又希望是中文,能方便中文输入的要求,这两个在语言设置中可以分别设置不同的了。
(3) 新版本的gnome-do, 很有意思, 它的皮肤当复合窗体特性打开的时候特别有意思,有一个dock模式, 特别像苹果下的dock, 既可以快捷键打开命令, 又可以当任务栏用, 这点跟苹果系统很像, 用起来很方便,有些喜欢用苹果样式的就不用再去装AWN了。gnome-do就可以满足你了。

其他的,等待进一步发掘吧! 决定试着往9.04上转了, 如果显卡还有ext4文件系统经过一段时间的测试使用正常的话.

2009年4月24日星期五

ubuntu 9.04试用手记

我的显卡是ATI Radeon HD3600 Series.

ubuntu9.04昨天正式发布,了解到ubuntu 9.04上使用xorg-server 1.6, 这点和Arch的配置相同,由于之前在Arch上ATI显卡的问题,所以不甘心的想在ubuntu 9.04上试一下,是否是我配置Arch的功力不够,还是确实在软件方面有问题。

Desktop CD启动计算机的结果是双屏只有一个点亮,安装fglrx驱动之后,提示不能插入fglrx模块,这是由于和已经载入的radeon冲突造成的,但是desktop CD不是那么容易听你调摆的,当手工停用gdm之后,想手工卸载radeon模块,加载fglrx模块,系统居然死了,所以这让我狠下心来把以前装arch的分区拿来装这个9.04了,当然把arch打了个包备份了,防止要回来。

首先是顺便使用desktop cd安装,发现desktop cd硬盘安装时,它始终提示有磁盘分区挂载了,确实也是挂载了,但是只要安装的分区不是放iso的分区应该就没有问题,可是desktop cd还是在那提示,于是只有再下载了一个alternative cd了。安装成功。

安装私有驱动之后,光重启X是不行的,要么就自己把gdm的服务停掉,然后手工卸载radeon模块,然后自己加载fglrx模块,所以干脆重启好了。

但是重启之后,启动X故障,键盘都不响应,也退不出来,只有重启了,在这之前学聪明了,把gdm服务停掉了,在测试的时候使用startx来启动X。在xorg.conf serverFlags节中加上DontZap为false的配置,这样就可以使用Ctrl+Alt+Delete关闭X了。

重启之后才发现刚刚可能不是启动故障,而是使用fglrx驱动造成X CPU占用100%,所以需要很久才能启动起来,在查资料的时候,发现了ubuntu关于这个问题的讨论。从文中貌似到了现在fglrx已经可以和xorg-server-1.6合用了,但是我这里的结果还是不行,另外也了解到了-ati驱动中已经加入了对ATI r6xx芯片的支持,也许这个驱动可以呢?于是卸载了fglrx驱动,改了xorg.conf, 使用开源驱动。

使用开源驱动默认只点亮了一个显示器,比如我只点亮了左边的显示器,这个时候,如果使用xrandr或者gnome-display-properties调整,会造成左边(主)显示器,显示整个虚拟桌面的右边,于是都没有办法点到菜单了。找到了开源ati驱动的网页,这个网页上的内容值得一读,另外关于双屏的设置,这个网页中所提到的文章应该好好读一下。由于xrandr是比较新的东西,以前做双显我了解到都是在xorg.conf中来作,并且aticonfig也是这么来做的,复制Device, Screen, Monitor节,然后在ServerLayout中配置两个屏幕的关系,但是这样做,在现在的xorg中,搭配ati驱动是会造成xorg不能启动的。我照着xrandr的how to实验xrandr的命令才后然发现下面的指令:

xrandr --output DVI-1 --mode 1280x1024 --rate 75

这样才点亮了右边的显示器,也才让我看到了在ubuntu 9.04下配置双显示器的可能性。
如果要连接在DVI-1上的显示器在主显示器的右边,使用下面的指令:

xrandr --output DVI-1 --right-of DVI-0

如果xrandr报错,提示屏幕大小不对,那么需要检查一下xorg.conf中关于虚拟屏幕的设置,比如我两个17的显示器,每个分辨率为1280x1024,那么虚拟屏幕大小至少应为2560x1024,我那时在arch上配置不成功,它提示屏幕最大只支持1280x1280,我曾经怀疑是开源radeon驱动仅仅可以支持到此大小,所以一度放弃了,但是也没有在xorg ati驱动的页面上找到此限制,所以才决定今天再试一下的。
但是很有意思的是,在ubuntu 8.10下,fglrx私有驱动工作得非常好,所以没有那么多限制了,直接使用ATI catalyst contrl center配置好就可以了,管它什么VitualScreen的设置!

一般的how to都会说要把xrandr的命令做到.xinirc,或者Xsession中去,但是ubuntu不用那么麻烦,使用gnome-display-properties改双屏设置之后,会在$HOME/.config下生成一个monitors.xml文件,里面保存了显示器的分辨率,相互关系等信息,在这方面ubuntu这是做得不错!

使用开源驱动,对于r6xx以上的显卡,3D支持还没有,性能也不佳,所以桌面效果就不能开了;否则就要等哪天fglrx驱动和xorg-server-1.6可以完美合作了。

看来我还是继续使用ubuntu 8.10好了!显卡支持好,偶尔还能打下Nexuiz呢!