由于用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,首先用locatepkgconfig查看下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目录,geditdbus-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一路顺利!
进入到dbus的-prefix的目录查看下是否安装完了,截图如下:
接下来就是要切换到qt的解压缩目录,重新./configure,在-dbus后面加上路径。也就是两个 -I 和一个 -L 。坑爹的是网上没人说清这一点,有人自己搞出来了说的模棱两可。我本来是按照安装目录里dbus-1.0.2找到include和lib,分别把里面的最深目录配置进去,发现总是错误。原来根本不是这么回事!找到-prefix目录下的lib文件下的pkgconfig文件夹,打开dbus-1.pc,里面内容如下:
prefix=/usr/local/arm/dbus-1.0.2
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include
system_bus_default_address=unix:path=/usr/local/arm/dbus-1.0.2/var/run/dbus/system_bus_socket
sysconfdir=/usr/local/arm/dbus-1.0.2/etc
session_bus_services_dir=/usr/local/arm/dbus-1.0.2/share/dbus-1/services
Name: dbus
Description: Free desktop message bus
Version: 1.0.2
Libs: -L${libdir} -ldbus-1
Cflags: -I${includedir}/dbus-1.0 -I${libdir}/dbus-1.0/include
重点看最后两句,这里-L和-I并没有配置到最深目录。(坑爹的是网上有人说要配置到最深目录,还有人说要改这个dbus-1.pc文件,NND!)仿照上面最后两句,正确的-dbus后的参数应该是:
-dbus -dbus-linked -I/usr/local/arm/dbus-1.0.2/include/dbus-1.0 -I/usr/local/arm/dbus-1.0.2/lib/dbus-1.0/include -L/usr/local/arm/dbus-1.0.2/lib -ldbus-1
-lpthread -lrt
保险起见,export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/arm/dbus-1.0.2/lib/pkgconfig 把dbus的pkgconfig这个文件夹路径配置进去,这一步不弄应该也可以!
最终的qt的./configure内容是:
./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 -dbus-linked -I/usr/local/arm/dbus-1.0.2/include/dbus-1.0 -I/usr/local/arm/dbus-1.0.2/lib/dbus-1.0/include -L/usr/local/arm/dbus-1.0.2/lib
-ldbus-1 -lpthread -lrt
然后就是make、make install,将生成的lib文件夹,打包压缩,拷贝到板子里再解压放到相应位置就可以了!如有疑问,参考我前几篇博客。
分享到:
相关推荐
. ├── dbus-1.12.20.tar.gz ├── dbus-glib-0.106.tar.gz ├── expat-2.3.0.tar.bz2 ├── glib-2.34.1.tar.xz ├── libffi-3.3.tar.gz ├── README └── zlib-1.2.11.tar.gz
qtfor windows 编译qtdbus
ARM平台下交叉编译的DBUS1.2的代码和库,对嵌入式LINUX和基于LINUX的移动平台开发非常有用,里面包含了所有代码和编译后生成的库文件和配置信息文件.
Configuration: cross_compile use_gold_linker compile_examples enable_new_dtags largefile neon precompile_header shared rpath release c++11 c++14 concurrent dbus reduce_exports stl Build options: Mode...
QtDbus详细的中文使用文档; QtDbus的signal通讯例程; QtDbus的method通讯例程; QtDbus的xml编程例程; 以上打包集合!!!
用QT做的DBus进程通讯小程序,方便学习DBus。
这是在linux中的QT的DBUS的使用方法实例
DBus通讯方式中,设置适配器Adaptor和Interface的通讯方式比较麻烦,重点在于适配器类(Adaptor类)和接口类(Interface类)的生成,Qt有工具可以自动生成相应的类。※建议Qt中DBus通讯使用Interface-Connection方式...
自己编译的Dbus模块
DBus通讯方式中,设置适配器Adaptor和Interface的通讯方式比较麻烦,重点在于适配器类(Adaptor类)和接口类(Interface类)的生成,Qt有工具可以自动生成相应的类。※建议Qt中DBus通讯使用Interface-Connection方式...
Dbus的Signal发送与接收和Method的调用以及xml文件的解析
D-Bus是一种高效低耗的进程间...Qt中QDBus的Interface-Connection通讯方式方式相比于Adaptor-Interface方式较为简单,这种方式不需要XML文件,也不需要自动生成的adaptor类和Interface类,给用户提供更简便的使用方式。
QT 的应用程序间的DBUS通信
dbus绿色版支持Windows10,基于dbus-1.13.6+vs2010编译。下载之后解压,然后添加bin目录到PATH即可。
dbus编译后的package阿斯顿发生的发生的发生的发生的发生的
Ubuntu14.04安装QT无法运行的解决方法,内含libdbus和libfreetype库。 直接解压到Qt/Tools/QtCreator/lib/Qt/lib/目录下即可使用。 详细使用方法请看https://www.jianshu.com/p/da6a0706fe07
qt dbus 1.10.6编译所需的依赖库
包含所需的库:zlib-1.2.11 libffi-3.0.13 gettext-0.19.8.1 glib-2.40.0 ncurses-5.9 ...编译ncurses-5.9过程中 会有一个错误,解决方法参考 https://blog.csdn.net/u014449366/article/details/73250513
用QtDBus封装dbus接口,并实现远程调用的demo
交叉编译bluez-5.47所需各种源代码,bluez-5.47, dbus-1.9.4, expat-2.1.0, glib-2.40, libffi-3.0 libical-1.0 ncurses-5.9 , readline-6.3 zlib-1.2.11