废话不多说,直接进入正题。
dbus移植过程当中遇到很多的问题,归根结底原因还是在于对dbus的不熟悉。
环境:
Ubuntu 12.04LTS
qt-everywhere-opensource-src-4.8.4.tar.gz
dbus-1.2.3.tar.gz
移植步骤:
1、下载http://dbus.freedesktop.org/releases/dbus/,我下载的版本dbus-1.2.3.tar.gz。
2、编译: 解压之后,配置
./configure --prefix=/opt/dbus-1.2.3 --without-x (嵌入式环境不用X代码)
make
make install
3、编译进Qt库:
配置的选项为:
./configure ****-dbus -dbus-linked -I/opt/dbus-1.2.3/include/dbus-1.0 -I/opt/dbus-1.2.3/lib/dbus-1.0/include -L/opt/dbus-1.2.3/lib -ldbus-1 -lpthread -lrt***
(其他选项就省了)
make
make install
4、配置
这里比较重要。如果没有配置DBUS_SESSION_BUS_ADDRESS环境变量将出现下面的错误:
Unable to autolaunch a dbus-daemon without a $DISPLAY for X11
在网上找,说要在profie中添加如下配置:
export DISPLAY=:0
配置过后,reboot,虽然没有了上面的错误,但是又会出现下面的错误:
Autolaunch requested,but X11 support not compiled in.Cannot continue
总之原因都在于没有配置DBUS_SESSION_BUS_ADDRESS环境变量,配置好了也就好了。(当然每个人遇到的问题可能相同,但解决办法可能会不同)
配置DBUS_SESSION_BUS_ADDRESS的方法:
1、开机需要开启dbus_deamon,这是dbus规定的,可以在/etc/rs.d/rcS中添加如下代码:
/opt/dbus-1.2.3/bin/daemon --session --print-address > /tmp/dbus-tmp-file &
--print-address参数是为了在stdout中输出dbus服务器的地址,然后将其重定向到/tmp/dbus-tmp-file中。
然后在profile中添加如下配置:
export DBUS_SESSION_BUS_ADDRESS=`cat /tmp/dbus-tmp-file`
好了,基本完成了。
如果还不能用首先用命令
env | grep DBUS_SESSION_BUS_ADDRESS
看下有没有配置好这个环境变量。之所以要这个,那就需要去看下dbus的原理了