LinuxSir.cn,穿越时空的Linuxsir!

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

ABI到底是什么?不能正常运作会有什么问题

[复制链接]
发表于 2006-6-19 20:31:28 | 显示全部楼层 |阅读模式
今天重装系统,用nv选项装完xorg-x11后,为了装XGL,emerge --nodeps nvidia-glx强行安装了8762版的nvidia-glx
正常启动X,推出后系统提示ABI有问题:
--WARNNING WARNING ---------------------
The server has avideo driver ABI version of 1.0 but this driver is designed to work with versions before 1.0. The driver will continue to load, but may behave strangely.
看了gentoo的官方论坛也没弄明白
这里问一下,上面的"behave strangely"到底指的是什么,ABI到底是影响那些东西,请高手赐教

另外,再问一个奇怪的问题,上次装完nvidia-glx后,字体出现渲染错误,有些字莫名其妙地消失了,鼠标移上去有时就好使了,在xorg.conf关掉RenderAccel后恢复正常,添加中文字体,更改字体配置后后再度出现错误,
但在我装完XGL后一切问题都解决了,加入Option   "RenderAccel"    "true"也正常,另外去掉会话里的XGL启动脚本也没有问题,这就不明白为什么了?????
发表于 2006-6-19 21:02:12 | 显示全部楼层
Application Binary Interface ABI 相同的两个程序就是 二进制 兼容的
对应于
Application Programming Interface 若两个程序 ABI 不同, 但 API 兼容, 用相同的 ABI 重新编译其中一个程序就行了.

比如 libstdc++.so.5 和 libstdc++.so.6 API 兼容, 但 ABI 不兼容, 一般的商业软件, Realplayer, Adobe Reader 都是用libstdc++.so.5 的 ABI , 但你自己不能重新编译, 所以必须要装 libstdc++.so.5 .
如果你有 Realplayer 的源码 ( Helix ), 因为 C++ 的 API 是兼容的, 就可以用 libstdc++.so.6 的 ABI 编译出用 libstdc++.so.6 的.
回复 支持 反对

使用道具 举报

发表于 2006-6-19 21:56:11 | 显示全部楼层
举个实际的例子:
比如c语言里传递参数给函数的时候,一般都是由右向左依次推入堆栈,全放在堆栈里。这就是一个abi的实例。
如果函数只从堆栈取参数,但是调用时却把参数放在了寄存器里,这就是abi不统一的实例。
当然还有很多其他的可能,这是最浅显的。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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