日期:2014-05-16  浏览次数:20491 次

交叉编译dbus模块到Qt 遇到的错误及解决

      由于用qt来检测U盘插拔,要用dbus。pc调试通过后,发现到板子里没有dbus。原来默认情况下,编译arm版本qt时是不带dbus的,因此要重新交叉编译qt。

我的配置:

./configure -prefix /usr/local/arm/arm2-qt-4.8.1 -opensource -embedded arm -xplatform qws/linux-arm-g++  -no-webkit -qt-libtiff -qt-libmng -qt-mouse-tslib -qt-mouse-pc -no-mouse-linuxtp -no-neon -nomake examples -nomake docs -nomake demos -nomake tools -no-qt3support -dbus

版本为qt4.8.1,注意最后的“-dbus”就是让qt带dbus模块。

         结果报错:The QtDBus module cannot be enabled because libdbus-1 version 0.93 was not found. 说需要一个libdbus-1,yum install了一下,发现这个东西已经安装了在pc上,否则我程序在pc下也不会跑通。只是没有嵌入式版本的,需要自己用源码交叉编译。

     我下载的dbus源码的版本是1.0.2,看到网上移植这个的多。首先新建一个文件夹,mkdir /usr/local/arm/dbus-1.0.2,然后解压源码,进到dbus-1.0.2目录里,输入:

./configure --host=arm-linux --prefix=/usr/local/arm/dbus-1.0.2 CC=arm-linux-gcc --cache-file=arm-linux.cache --without-x 

报错:checking abstract socket namespace... configure: error: cannot run test program while cross compiling

解决:1,首先用locate pkgconfig查看下pkgconfig安装了没有,一般都安装了。找到路径配置到环境变量里:export PKG_CONFIG_PATH=/usr/lib/pkgconfig

2,光设这个环境变量还是不行的,在终端里输入:

#echo ac_cv_have_abstract_sockets=yes>arm-linux.cache

之后,./configure通过!

然后make,

报错如下

make[3]: *** [dbus-sysdeps-unix.lo] 错误 1
make[3]: 离开目录“/home/yan/download/dbus-1.0.2/dbus”
make[2]: *** [all] 错误 2
make[2]: 离开目录“/home/yan/download/dbus-1.0.2/dbus”
make[1]: *** [all-recursive] 错误 1
make[1]: 离开目录“/home/yan/download/dbus-1.0.2”
make: *** [all] 错误 2

解决:进到dbus-1.0.2目录下的dbus目录,gedit dbus-sysdeps-unix.c,在文件的开头处添加:

struct ucred
{
pid_t pid; /* PID of sending process. */
uid_t uid; /* UID of sending process. */
gid_t gid; /* GID of sending process. */
};
注意上面最后的“;”要带的。

之后make ,make install一路顺利!