dbus linux system_bus_socket arm,交叉編譯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一路順利!

進入到dbus的-prefix的目錄查看下是否安裝完了,截圖如下:

aHR0cDovL215LmNzZG4ubmV0L3VwbG9hZHMvMjAxMjA4LzExLzEzNDQ2ODEwNzNfNzkxNy5qcGc=

接下來就是要切換到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!

aHR0cDovL3N0YXRpYy5ibG9nLmNzZG4ubmV0L3hoZWRpdG9yL3hoZWRpdG9yX2Vtb3QvZGVmYXVsdC9hbmdyeS5naWY=)仿照上面最后兩句,

正確的-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文件夾,打包壓縮,拷貝到板子里再解壓放到相應位置就可以了!如有疑問,參考我前幾篇博客。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值