編譯環(huán)境:ubuntu14.04
編譯工具:arm-none-linux-gnueabi-gcc
參考文檔https://blog.csdn.net/gatieme/article/details/48751743
這個(gè)文檔說(shuō)的很詳細(xì),但是編譯的是低版本的bluez掖举,下面是編譯bluez5.50中遇到的問(wèn)題
總體思路:交叉編譯過(guò)程中遇到提示缺少的庫(kù)就去下載編譯捎稚,有些庫(kù)不是必須的嘱蛋,可以在configure的參數(shù)中設(shè)置該項(xiàng)為disable,具體執(zhí)行./configure --help查看嫩痰。
問(wèn)題1:configure: error: C compiler cannot create executables
在安裝完編譯工具鏈后渴析,需要配置環(huán)境變量,但是配置變量實(shí)在用戶權(quán)限下颖低,而執(zhí)行用的sudo所以配置完也可能找不到,所以干脆使用絕對(duì)路徑弧烤,如下:
sudo ./configure --prefix=/opt/arm/bluez --host=arm-none-linux --target=arm-none-linux CC=/usr/local/arm-2014.05/bin/arm-none-linux-gnueabi-gcc
問(wèn)題2:No package 'expat' found
正常交叉編譯完expat后忱屑,在交叉編譯dbus的時(shí)候提示No package 'expat' found,安裝下面兩個(gè)庫(kù)
sudo apt-get install libexpat1
sudo apt-get install libexpat1-dev
問(wèn)題3:can't faind -lgib
正常情況下dbus不會(huì)依賴glib暇昂,這里提示找不到-lgib庫(kù)是因?yàn)閐bus的test程序里對(duì)glib庫(kù)有依賴莺戒,test里是些demon,編譯庫(kù)用不到急波。所以在configure時(shí)加上--disable-tests參數(shù)直接跳過(guò)从铲。后面編譯glib的時(shí)候發(fā)現(xiàn)對(duì)dbus也有依賴,這里不注意的話這兩庫(kù)誰(shuí)也編譯不了幔崖。
問(wèn)題4:cannot run test program while cross compiling
configure glib4.2的時(shí)候會(huì)生成測(cè)試文件食店,因?yàn)榄h(huán)境的問(wèn)題無(wú)法生成渣淤,需要配置環(huán)境,如下:
sudo ./configure --prefix=/opt/arm/bluez --host=arm-none-linux-gnueabi --target=arm-none-linux-gnueabi ?CC="/usr/local/arm-2014.05/bin/arm-none-linux-gnueabi-gcc -I/opt/arm/bluez/include -L/opt/arm/bluez/lib" --cache-file=arm-linux.cache glib_cv_long_long_format=ll glib_cv_stack_grows=no glib_cv_have_strlcpy=no glib_cv_have_qsort_r=yes glib_cv_va_val_copy=yes glib_cv_uscore=no glib_cv_rtldglobal_broken=no ac_cv_func_posix_getpwuid_r=yes ac_cv_func_posix_getgrgid_r=yes
問(wèn)題5:編譯bluez提示有未定義的某個(gè)glib中的api
如果是can't find -lgib那是缺少glib庫(kù)吉嫩,如果已經(jīng)編譯了glib价认,還提示有未定義的glib api肯定是當(dāng)前使用的glib版本太老了,需要使用新版本的glib自娩。(PS:我用的是glib4.2用踩,再低的應(yīng)該不能匹配bluez5.50了)
問(wèn)題6:編譯完bluez后沒(méi)有生成.so和.a文件
bluez5.5默認(rèn)的configure配置不會(huì)生成so和a文件,需要配置忙迁,如下:
sudo ./configure --prefix=/opt/arm/bluez --host=arm-none-linux-gnueabi --target=arm-none-linux-gnueabi ? ?CC="/usr/local/arm-2014.05/bin/arm-none-linux-gnueabi-gcc -I/opt/arm/bluez/include -L/opt/arm/bluez/lib" --sysconfdir=/etc --localstatedir=/var --enable-experimental --with-systemdsystemunitdir=/lib/systemd/system --with-systemduserunitdir=/usr/lib/systemd --disable-client --enable-network --enable-health --enable-tools --enable-tools --enable-bccmd --enable-cups --enable-test --enable-library --enable-static=yes --enable-shared=yes --enable-threads --enable-pie
上面這些當(dāng)然不是編譯過(guò)程遇到的全部問(wèn)題脐彩,剩下的都是缺少某個(gè)某個(gè)頭文件和鏈接庫(kù)的問(wèn)題,這種問(wèn)題不用糾結(jié)姊扔,直接下載對(duì)應(yīng)的庫(kù)繼續(xù)交叉編譯吧惠奸,再遇到的問(wèn)題網(wǎng)上基本都有了。