1. ubuntu系统
ubuntu系统无需移植,直接安装就好了。使用如下命令安装
sudo apt-get install libbluetooth-dev | Ubuntu系统直接用这个命令安装就好了 |
2. ARM系统
ARM系统移植比较复杂,需要移植很多库,具体如下
2.1 移植zlib
步骤 | 说明 |
wget wget https://zlib.net/current/zlib.tar.gz tar -xzf zlib.tar.gz cd zlib/ ./configure --prefix=/usr/ddd/temp/bluez/arm-bluez | |
CC=arm-linux-gnueabihf-gcc LDSHARED=arm-linux-gnueabihf-gcc -shared -Wl,-soname,libz.so.1,--version-script,zlib.map CPP=arm-linux-gnueabi-gcc -E AR=arm-linux-gnueabi-ar RANLIB=arm-linux-gnueabi-ranlib | 在Makefile 中修改 |
make make install |
2.2 移植libffi
步骤 | 说明 |
wget ftp://sourceware.org/pub/libffi/libffi-3.0.13.tar.gz tar -xzf libffi-3.0.13.tar.gz cd libffi-3.0.13/ ./configure --host=arm-linux-gnueabihf --prefix=/usr/ddd/temp/bluez/arm-bluez make make install |
2.3 移植gettext
步骤 | 说明 |
wget http://ftp.gnu.org/pub/gnu/gettext/gettext-0.22.tar.xz tar -xvf gettext-0.22.tar.xz cd gettext-0.22 ./configure --host=arm-linux-gnueabihf --prefix=/usr/ddd/temp/bluez/arm-bluez CFLAGS="-fPIC" make -j8 sudo make install |
2.4 移植glib
步骤 | 说明 |
wget https://download.gnome.org/sources/glib/2.40/glib-2.40.2.tar.xz tar -xjvf glib-2.40.0.tar.xz cd glib-2.40.0/ ./configure --host=arm-linux-gnueabihf --prefix=/usr/ddd/temp/bluez/arm-bluez PKG_CONFIG_PATH=/usr/ddd/temp/bluez/arm-bluez/lib/pkgconfig 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 | 很难下载,可以直接从网页下载 |
2.5 移植expat
步骤 | 说明 |
https://sourceforge.net/projects/expat/files/expat/2.4.0/expat-2.4.0.tar.xz/download tar -xvf expat-2.3.0.tar.xz cd expat-2.3.0/ ./configure --host=arm-linux-gnueabihf --prefix=/usr/ddd/temp/bluez/arm-bluez make make install | 直接下载 |
2.6 移植dbus
步骤 | 说明 |
wget http://dbus.freedesktop.org/releases/dbus/dbus-1.8.0.tar.gz tar -xf dbus-1.8.0.tar.gz cd dbus-1.8.0/ ./configure --host=arm-linux-gnueabihf --prefix=/usr/ddd/temp/bluez/arm-bluez/ CFLAGS=-I/usr/ddd/temp/bluez/arm-bluez/include CPPFLAGS=-I/usr/ddd/temp/bluez/arm-bluez/include LDFLAGS=-L/usr/ddd/temp/bluez/arm-bluez/lib GLIB_CFLAGS="-I/usr/ddd/temp/bluez/arm-bluez/include/glib-2.0 -pthread -I/usr/ddd/temp/bluez/arm-bluez/lib/glib-2.0/include/" make make install |
2.7 移植libical
步骤 | 说明 |
git clone https://github.com/libical/libical.git tar -xzf libical-1.0.tar.gz cd libical-1.0/ export CC=arm-linux-gnueabihf-gcc export CXX=arm-linux-gnueabihf-g++ ll /usr/ddd/temp/bluez//arm-bluez cmake -DCMAKE_INSTALL_PREFIX=/usr/ddd/temp/bluez/arm-bluez make make install |
2.8 移植ncurses
步骤 | 说明 |
wget http://ftp.gnu.org/pub/gnu/ncurses/ncurses-6.2.tar.gz tar -xzf ncurses-6.2.tar.gz cd ncurses-6.2/ ln -s /usr/bin/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-strip /usr/bin/strip //很重要 ./configure --host=arm-linux-gnueabihf --prefix=/usr/ddd/temp/bluez/arm-bluez CXX="arm-linux-gnueabihf-g++" CC="arm-linux-gnueabihf-gcc" --with-shared make make install |
2.9 移植readline
步骤 | 说明 |
wget ftp://ftp.cwru.edu/pub/bash/readline-6.3.tar.gz tar -xzf readline-6.3.tar.gz cd readline-6.3/ ./configure --host=arm-linux-gnueabihf --prefix=/usr/ddd/temp/bluez/arm-bluez bash_cv_wcwidth_broken=yes LDFLAGS=-L/usr/ddd/temp/bluez/arm-bluez/lib make SHLIB_LIBS=-lncurses make install | 注意 -L后无空格 |
2.10 移植bluez
步骤 | 说明 |
wget http://www.kernel.org/pub/linux/bluetooth/bluez-5.33.tar.gz tar -xJf bluez-5.33.tar.gz cd bluez-5.33 ./configure --host=arm-linux-gnueabihf --prefix=/usr/ddd/temp/bluez/arm-bluez PKG_CONFIG_PATH=/usr/ddd/temp/bluez/arm-bluez/lib/pkgconfig --disable-systemd --disable-udev --disable-cups --disable-obex --enable-library LDFLAGS="-L/usr/ddd/temp/bluez/arm-bluez/lib -lncurses" CFLAGS=-I/usr/ddd/temp/bluez/arm-bluez/include CPPFLAGS=-I/usr/ddd/temp/bluez/arm-bluez/include CFLAGS=-I/usr/ddd/temp/bluez/arm-bluez/include make make install | 5.18的版本在应用编译使时头文件会出错,无法使用 |
说明: 编译完成后, 头文件在arm-bluez\include目录中 库文件在arm-bluez\lib目录中,其中一些用不到的可以删除掉 可执行文件在arm-bluez\bin和arm-bluez\libexec目录中 |
2.11 移植过程中遇到的问题
现象 | 解决方法 |
Working zlib library and headers not found错误 | 是ubuntu系统中zlib版本太低,更新一下即可 sudo apt-get install zlib1g-dev |
You must have either have gettext support in your C library, or use the *** GNU gettext library. (http://www.gnu.org/software/gettext/gettext.html 错误 | 是ubuntu系统中gettext版本太低,更新一下即可 sudo apt-update sudo apt-get install gettext |
error: Could not find a glib-genmarshal in your PATH | 是ubuntu系统中glib版本太低,更新一下即可 sudo apt-get install libglib2.0-dev |
strip: Unable to recognise the format of the input file `/usr/ddd/temp/bluez/arm-bluez/bin/tic' | 默认使用了ubuntu系统中的strip,需要对strip做软连接,如下 ln -s /usr/bin/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-strip /usr/bin/strip |