因为需要开发蓝牙功能,平台方也没有编译好的bluez工具,所以自己动手花了四五天时间,终于将bluez工具编译了出来,在此做一个编译总结。
平台:Hi3559V200
编译工具链:arm-himix100-linux-gcc
bluez编译本身依赖较多其他库,下图是依赖关系:
下图是我编译使用的各个源程序版本号:
编译前需要将bluez以及依赖库的源程序下载好,在同目录下创建_install存放头文件和库文件以及bin文件,以下为具体编译流程。
Expat编译:
Expat源码下载路径:https://sourceforge.net/projects/expat/files/expat/2.0.1/
./configure --prefix=$PWD/../_install --host=arm-himix100-linux CC=arm-himix100-linux-gcc CXX=arm-himix100-linux-g++ --enable-shared --enable-static CFLAGS=-I$PWD/../expat-2.0.1/_install/include LDFLAGS=-L$PWD/../expat-2.0.1/_install/lib --disable-tests
make
make install
Dbus编译:
Dbus源码下载路径:https://dbus.freedesktop.org/releases/dbus/
./configure --prefix=$PWD/../_install --host=arm-himix100-linux CC=arm-himix100-linux-gcc CXX=arm-himix100-linux-g++ --enable-shared --enable-static CFLAGS=-I$PWD/../_install/include LDFLAGS=-L$PWD/../_install/lib --disable-tests
make
make install
编译Dbus时如果遇到报错:
aclocal-1.14: 未找到命令
automake-1.14: 未找到命令
我的编译环境中的aclocal和automake版本是1.15,所以需要打开Makefile将aclocal-1.14 改为aclocal-1.15,将automake-1.14 改为automake-1.15,可以查看自己系统中的程序版本,在Makefile中修改即可。
Glib编译:
Glib编译流程详解链接:海思平台编译glib库_小楼一夜听春雨-y的博客-CSDN博客
ncurses编译:
ncurses源码下载路径:http://ftp.gnu.org/pub/gnu/ncurses/
./configure --host=arm-himix100-linux --prefix=$PWD/../_install CC=arm-himix100-linux-gcc CXX=arm-himix100-linux-g++ --disable-stripping --without-manpages --without-tack --without-tests --with-shared
make
make install
如果遇到ncueses编译报错:error: expected ')' before 'int'
将文件curses.tail中104行注释删除即可解决。
readline编译:
readline源码下载路径:http://ftp.gnu.org/gnu/readline/
./configure --host=arm-himix100-linux --prefix=$PWD/../_install CC=arm-himix100-linux-gcc CXX=arm-himix100-linux-g++ LDFLAGS=-L$PWD/../_install/lib bash_cv_wcwidth_broken=yes
make SHLIB_LIBS=-lncurses
make install
libical编译:
libical源码下载路径:https://github.com/libical/libical/tree/1.0
libical中时使用cmake来生成Makefile的,因此需要先将编译工具临时指定为对应的交叉编译工具
export CC=arm-himix100-linux-gcc
export CXX=arm-himix100-linux-g++
cmake -DCMAKE_INSTALL_PREFIX=$PWD/../_install
make
make install
最最重要的,bluez编译:
bluez源码下载路径:http://www.bluez.org/
bluez会编译出需要的linux蓝牙开发工具,因此再bluez中创建一个_install目录专门用于存放bluez编译生成文件。
./configure --host=arm-himix100-linux --prefix=$PWD/_install PKG_CONFIG_PATH=$PWD/../_install/lib/pkgconfig CPPFLAGS=-I$PWD/../_install/include LDFLAGS=-L$PWD/../_install/lib --disable-systemd --disable-udev --disable-cups --disable-obex --enable-library
make
make install
编译bluez的时候如果遇到报错:libreadline.so: undefined reference to `tgoto' 等realine库链接找不到定义的,是需要在bluez的Makefile中添加-lncurses,在所有链接readline的库前添加链接ncurses库。添加后即可编译成功。
如上图,是编译成功后生成的bluez工具。