LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2609|回复: 5

终于搞清楚zhcon为什么装不上了

[复制链接]
发表于 2002-12-20 21:22:04 | 显示全部楼层 |阅读模式
刚才又研究了一下,我用没有frambuffer支持的2.4.19和2.4.20启动,都能在640X480的分辨率下正常显示zhcon,确实和tram说的一样,zhcon可以不需要frambuffer的支持。那么为什么我原来安装那么多次zhcon都没有成功呢?为什么每次启动zhcon,都是在屏幕切换到图形方式显示时死机?我查看了今天下午的安装记录,当时即使编译内核,加上了frambuffer的支持,启动zhcon也没有成功,后来怀疑是gpm的影响,所以接着安装zhcon自己带的gpm-1.19.6,安装完成后,启动 zhcon获得成功。因为当时没太在意,所以还以为成功的原因是对内核增加了frambuffer的支持。直到刚才用不同的内核启动zhcon成功才恍然大悟,是gpm的动态链接库造成的问题。
用ldd zhcon可以看到如下结果:
[root:/usr/local/bin]# ldd zhcon
        libgpm.so.1 => /usr/lib/libgpm.so.1 (0x40019000)
        libdl.so.2 => /lib/libdl.so.2 (0x40039000)
        libutil.so.1 => /lib/libutil.so.1 (0x4003c000)
        libstdc++.so.5 => /usr/lib/libstdc++.so.5 (0x4003f000)
        libm.so.6 => /lib/libm.so.6 (0x400f3000)
        libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x40117000)
        libc.so.6 => /lib/libc.so.6 (0x4011f000)
        libncurses.so.5 => /lib/libncurses.so.5 (0x40253000)
        /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
从中可以看到,采用编译方式安装的zhcon运行时要动态链接libgpm.so.1,而这个libgpm.so.1是编译gpm时安装上去的。如果这个动态库与zhcon不兼容,轻则造成zhcon下鼠标无法使用,重则造成zhcon根本就无法启动。由于LFS安装的gpm是1.20.0的,所以就造成了在LFS上安装zhcon后,启动不了zhcon的问题。只有使用zhcon自己带的gpm-1.19.6(这是修改过源代码的,与zhcon兼容),才能启动zhcon,并在zhcon下正常使用gpm。
发表于 2002-12-20 21:31:15 | 显示全部楼层
你装的时候,有没有改zhcon里的configure脚本?我不改的时候,就用不上gpm,改了以后,也看不到它链接上了libgpm,很怪!
 楼主| 发表于 2002-12-20 22:03:52 | 显示全部楼层
我安装zhcon时是先configure,然后再删除掉tools目录下的Makefile中所有与getbpsf有关的项目。但我没有加上-lcurses。我想zhcon启动时肯定要检测gpm是不是存在,如果是,就要和它发生进程间通信,可能是用管道吧。这样,gpm才能处理显示在zhcon伪终端上的中文字符。而检测和处理主要通过gpm的动态库 libgpm.so.1进行,一旦 libgpm.so.1与zhcon不协调,就会造成zhcon启动中止,发生我所说的死机现象。所以要么就不装gpm,要装就安装zhcon自己带的修改过源代码的gpm-1.19.6。
发表于 2002-12-20 23:41:42 | 显示全部楼层
你看看我的结果:
[tram@~]$ ldd /usr/local/bin/zhcon   
        libncurses.so.5 => /lib/libncurses.so.5 (0x40020000)
        libdl.so.2 => /lib/libdl.so.2 (0x40066000)
        libutil.so.1 => /lib/libutil.so.1 (0x4006a000)
        libstdc++.so.5 => /usr/lib/libstdc++.so.5 (0x4006d000)
        libm.so.6 => /lib/libm.so.6 (0x40120000)
        libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x40143000)
        libc.so.6 => /lib/libc.so.6 (0x4014b000)
        /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
真没有gpm,我也知道它要用gpm,不过这真是怪事了。
 楼主| 发表于 2002-12-21 00:02:57 | 显示全部楼层
这个问题可真是奇怪。看来得好好研究一下。准备研读zhcon的源代码吧。不过,会不会是你安装zhcon时,还没有安装gpm,所以在configure时检测不到gpm,自然就不加入去gpm的支持了。如果是这样,可以在安装gpm之后,再编译一次zhcon。
 楼主| 发表于 2002-12-21 18:22:38 | 显示全部楼层
今天又研究了一下。我做了个试验,用zhcon自己带的gpm-1.19.6/src/liblow.c替换掉gpm-1.20.0/src/liblow.c,编译后,完全可以在zhcon下使用鼠标。只不过用gpm -v 查看时,发现版本变成了1.19.6,是不是感到有点搞笑?
经过这次试验之后,完全可以肯定问题出在liblow.c上,这个liblow.c在编译gpm时成为动态库libgpm.so.1的一部分,而zhcon在启动时与gpm发生联系主要就是造它进行。gpm在设计时并没有考虑在图形界面下使用,所以zhcon直接支持gpm有困难,直到zhcon-0.2.0才支持使用gpm,而这是通过修改liblow.c来实现的。所以在zhcon下使用gpm,只能配合使用zhcon自己带的,修改过源代码的gpm-1.19.6-patched,换成其它没有修改过的版本,都会造成zhcon启动时与gpm发生冲突的问题。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表