日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

编译bluez-5.25 通过 Linux环境下运行

發布時間:2024/9/3 linux 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 编译bluez-5.25 通过 Linux环境下运行 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本次編譯的是bluez 5版本以上的,之前的版本不支持藍牙4.0,只有5版本以上支持4.0.我的Linux宿主機是Ubuntu14.04版本

本次編譯參考http://wiki.beyondlogic.org/index.php?title=Cross_Compiling_BlueZ_Bluetooth_tools_for_ARMhttp://wiki.beyondlogic.org/index.php?title=Cross_Compiling_BlueZ_Bluetooth_tools_for_ARM

在這個基礎上還做了一些小修改,避免一些錯誤。好開始記錄步驟,比較繁瑣,O(∩_∩)O。這里也對原文做一些解釋。

zlib-1.2.8

zlib的編譯不需要指定--host,但是后面配置完成后需要修改Makefile文件,以進行交叉編譯。

源碼:wget http://zlib.net/zlib-1.2.8.tar.gz

配置:./configure --prefix=/usr/local/bluez5/bluez5

修改Makefile:

CC=arm-cortex_a9-linux-gnueabi-gcc
LDSHARED=arm-cortex_a9-linux-gnueabi-gcc -shared -Wl,-soname,libz.so.1,--version-script,zlib.map
CPP=arm-cortex_a9-linux-gnueabi-gcc -E
AR=arm-cortex_a9-linux-gnueabi-ar
RANLIB=arm-cortex_a9-linux-gnueabi-ranlib

如果不想修改Makefile那么可以修改configure配置文件:configure文件第19行后面添加一行 CHOST=arm-linux-gnueabihf。然后再用命令./configure --prefix=/usr/local/bluez5/bluez5配置即可

編譯:

make

make install


libffi-3.0.13

源碼:wget ftp://sourceware.org/pub/libffi/libffi-3.0.13.tar.gz

配置:./configure --host=arm-cortex_a9-linux-gnueabi --prefix=/usr/local/bluez5/bluez5

編譯:

make

make install


glib-2.40.0

編譯glib依賴zlib, libffi and glibc >= 2.18,宿主機若是Ubuntu14.04,glibc的版本為2.19,這里是滿足的。另外很可能會缺少glib-genmarshal ,我編譯時是缺少了,這個好解決,執行命令

sudo apt-get install libglib2.0-dev 安裝即可。如果安裝不上,那么直接下載安裝包安裝,地址為:https://launchpad.net/ubuntu/+source/glib2.0,要下載三個安裝包: libglib2.0-0_2.40.2-0ubuntu1_amd64.deb、libglib2.0-bin_2.40.2-0ubuntu1_amd64.deb、libglib2.0-dev_2.40.2-0ubuntu1_amd64.deb,依次安裝即可。注意這個包要取決于ubuntu的版本,比較煩人。 下面是具體的步驟:

源碼:wget http://ftp.gnome.org/pub/gnome/sources/glib/2.40/glib-2.40.0.tar.xz

配置:./configure --host=arm-cortex_a9-linux-gnueabi --prefix=/usr/local/bluez5 PKG_CONFIG_PATH=/usr/local/bluez5/lib/pkgconfig LIBFFI_CFLAGS="-I/usr/local/bluez5/lib/libffi-3.0.13/include" LIBFFI_LIBS="-L/usr/local/bluez5/lib -lffi" ZLIB_CFLAGS="-I/usr/local/bluez5/include" ZLIB_LIBS="-L/usr/local/bluez5/lib -lz" glib_cv_stack_grows=no glib_cv_uscore=yes ac_cv_func_posix_getpwuid_r=yes ac_cv_func_posix_getgrgid_r=yes

編譯:

make

make install

D-Bus

D-Bus daemon會需要expat?XML parser 庫,所以這里需要先編譯expat庫。如果不安裝會出現下面的錯誤:

checking for XML_ParserCreate_MM in -lexpat... no configure: error: Explicitly requested expat but expat not found

步驟如下

expat-2.1.0

源碼:wget http://sourceforge.net/projects/expat/files/expat/2.1.0/expat-2.1.0.tar.gz

配置:./configure --host=arm-cortex_a9-linux-gnueabi --prefix=/usr/local/bluez5/bluez5

編譯:

make

make install


D-Bus1.9.4

在使用原文中的配置時,編譯會報錯,如下:

corrupt.c:29:18: fatal error: glib.h: 沒有那個文件或目錄
/wsh_space/my_install/bluez5/include/glib-2.0/glib.h:30:26: fatal error: glib/galloca.h: 沒有那個文件或目錄
fatal error: glibconfig.h: 沒有那個文件或目錄

經過查看,是test目錄下文件引用的.h文件路徑不正確,可以一個一個修改路徑,但是相當繁瑣。

我的方法是,屏蔽test,增加--disable-tests選項。

源碼:wget http://dbus.freedesktop.org/releases/dbus/dbus-1.9.4.tar.gz

配置:./configure --host=arm-cortex_a9-linux-gnueabi --prefix=/usr/local/bluez5/bluez5 CFLAGS=-I/usr/local/bluez5/include LDFLAGS=-L/usr/local/bluez5/lib --enable-abstract-sockets --disable-tests

編譯:

make

make install


libical-1.0

bluez的編譯需要libical的支持,編譯libical需要cmake和g++,所以系統中需要這兩個工具,可以運行下面兩個命令進行安裝,需要保持網絡暢通。

sudo apt-get install cmake
sudo apt-get install g++-arm-linux-gnueabi

然后就可進行編譯安裝了

源碼:wget http://downloads.sourceforge.net/freeassociation/libical-1.0.tar.gz

配置: export CC=arm-cortex_a9-linux-gnueabi-gcc
export CXX=arm-linux-gnueabi-g++

rm CMakeCache.txt#要加上避免重新配置出錯
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/bluez5/bluez5

注意這里的命令是直接在命令行執行的。

編譯:

make

make install


Readline


編譯readline是需要ncurses的支持,如果沒有ncurses,編譯時會報下面的錯誤。

/usr/arm-linux-gnueabi/lib/libreadline.so: undefined reference to `PC' /usr/arm-linux-gnueabi/lib/libreadline.so: undefined reference to `tgetflag' /usr/arm-linux-gnueabi/lib/libreadline.so: undefined reference to `tgetent' /usr/arm-linux-gnueabi/lib/libreadline.so: undefined reference to `UP' /usr/arm-linux-gnueabi/lib/libreadline.so: undefined reference to `tputs' /usr/arm-linux-gnueabi/lib/libreadline.so: undefined reference to `tgoto' /usr/arm-linux-gnueabi/lib/libreadline.so: undefined reference to `tgetnum' /usr/arm-linux-gnueabi/lib/libreadline.so: undefined reference to `BC' /usr/arm-linux-gnueabi/lib/libreadline.so: undefined reference to `tgetstr' 引用ncurses的方法是,在make時添加SHLIB_LIBS=-lncurses選項


ncurses-5.9

源碼:wget http://ftp.gnu.org/pub/gnu/ncurses/ncurses-5.9.tar.gz

配置:./configure --host=arm-cortex_a9-linux-gnueabi --prefix=/usr/local/bluez5/bluez5 CXX="arm-linux-gnueabi-g++"?CFLAGS=-fPIC

編譯:

make

make install


Readline6.3

配置時需要添加bash_cv_wcwidth_broken=yes選項,避免出現下面的錯誤:

checking for wcwidth broken with unicode combining characters... configure: error: in `/.../readline-6.3': configure: error: cannot run test program while cross compiling

源碼:wget ftp://ftp.cwru.edu/pub/bash/readline-6.3.tar.gz

配置:./configure --host=arm-cortex_a9-linux-gnueabi --prefix=/usr/local/bluez5/bluez5 bash_cv_wcwidth_broken=yes

編譯:

make -j4 SHLIB_LIBS=-lncurses

make install


Building BlueZ


bluez包含了藍牙所需的基本工具,如hciattach, hciconfig, hcitool and rfcomm等。

BlueZ 5.25 至少需要 GLib >= 2.28, D-Bus >= 1.6 and libudev >= 143,由于linudev是個相當麻煩的東西,為此在編譯bluez時,把它給屏蔽了即可。

如果想下載,那么下載地址為:http://pkgs.fedoraproject.org/repo/pkgs/udev/

源碼:wget http://www.kernel.org/pub/linux/bluetooth/bluez-5.25.tar.xz

配置:./configure --host=arm-cortex_a9-linux-gnueabi --prefix=/usr/local/bluez5 PKG_CONFIG_PATH=/usr/local/bluez5/lib/pkgconfig CC="arm-linux-gnueabihf-gcc -L/usr/local/bluez5/lib -I/usr/local/bluez5/include -I/usr/local/bluez5/include/glib-2.0 -I/usr/local/bluez5/lib/glib-2.0/include -I/usr/local/bluez5/include/dbus-1.0 -I/usr/local/bluez5/lib/dbus-1.0/include" --disable-systemd --disable-udev --disable-cups --disable-obex --enable-library

編譯:

make?

應該會報錯,提示如下:

/usr/arm-linux-gnueabi/lib/libreadline.so: undefined reference to `PC' /usr/arm-linux-gnueabi/lib/libreadline.so: undefined reference to `tgetflag' /usr/arm-linux-gnueabi/lib/libreadline.so: undefined reference to `tgetent' /usr/arm-linux-gnueabi/lib/libreadline.so: undefined reference to `UP' /usr/arm-linux-gnueabi/lib/libreadline.so: undefined reference to `tputs' /usr/arm-linux-gnueabi/lib/libreadline.so: undefined reference to `tgoto' /usr/arm-linux-gnueabi/lib/libreadline.so: undefined reference to `tgetnum' /usr/arm-linux-gnueabi/lib/libreadline.so: undefined reference to `BC' /usr/arm-linux-gnueabi/lib/libreadline.so: undefined reference to `tgetstr' 主要時鏈接庫的問題,不知道為什么不加入,可能再編譯readline時未加入。解決方法是:

在makefile的2004、2205、2211、2221、2227行添加-lncurses庫的應用即可?;蛘呔幾g時加入SHLIB_LIBS=-lncurses參數。

make install?DESTDIR=/usr/local/bluez5

另外還可能會報manager_init未定義的問題,這個從提示中可知,manager.c文件未編譯引起的,不知道為什么配置的不會把該文件加入編譯。對此問題有兩種方法,一種是修改Makefile文件加入編譯,另外一種是修改Makefile.in原始配置文件,建議使用第二種,這是一勞永逸的方法。在am__src_bluetoothd_SOURCES_DIST參數中添加manager.c編譯設置,其他需要修改的地方參考src/eir.c的寫法即可。


到此,完成,其他的測試可以參考原文。

注意整個變過程安裝目錄的選擇,最好選擇開發板使用的路徑,免得移植的時候莫名其妙。比如在這里我使用統一的/usr/local/bluez5路徑。


總結

以上是生活随笔為你收集整理的编译bluez-5.25 通过 Linux环境下运行的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。