编译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库的应用即可。或者编译时加入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环境下运行相关推荐
- linux如何运行java程序,Linux环境下运行简单java程序
一.安装java 1.下载jdk8 选择对应jdk版本下载.(Tips:可在Windows下载完成后,通过FTP或者SSH到发送到Linux上) 2. 登录Linux,切换到root用户 su roo ...
- 在Linux环境下运行你的第一个C语言程序
在Linux环境下运行你的第一个C语言程序 1.前言 2.环境配置 1.1 安装编辑器 1.2 安装gcc编译器 3.编写第一个C程序 3.1 新建文件夹 3.2 编辑该文件 3.3 编译mian.c ...
- linux环境下运行flex,给力搜linux-linux成功搭建flash(flex)编译环境
给力搜linux-linux成功搭建flash(flex)编译环境 1 下载linux flex sdk 在http://opensource.adobe.com/下载flex sdk. 2 在lin ...
- linux 编译查看链接库详情,Linux环境下的编译,链接与库的使用
链接参数控制 链接器中提供了-dn -dy 参数来控制使用的是动态库还是静态库,-dn表示后面使用的是静态库,-dy表示使用的是动态库 例: g++ -Lpath -Wl,-dn -lx -Wl,-d ...
- Linux环境下运行matlab以及执行m文件
在Linux下安装完matlab后,会在/usr/local/bin/下生成matlab文件,可以使用matlab命令. 在命令行下执行: $ matlab -help 可以得到帮助文件: Usage ...
- linux环境下运行open error,错误:运行OpenCL代码时clGetPlatformIDs -1001(Linux)
(Mods:我不确定这篇文章是否应该转移到AskUbuntu,因为这是一个与Linux bumblebee相关的问题,而不是OpenCL本身?) 好的,所以我设法在经过大量的努力后解决了这个问题. 我 ...
- linux环境下运行flex,什么是flex?
昨天装一个软件的时候./configure后遇到下面的问题,错误代码见最后. 网上查到有什么"FLEX 2.01 全套下载:客户端: Flex Builder 2 with Charting ...
- Pycharm Linux环境下运行
下载链接 下载后解压 进入bin文件夹 ./pycham.sh 或 sh pycharm.sh
- linux环境下基于opengl的3*3可控魔方绘制
一. 前言 本程序设计使用opengl函数库,在linux环境下运行,绘制一个3*3的魔方,可以通过键盘控制任意层的旋转,达到魔方转动的效果.(参考很多年前一毕业论文,个人觉得写的好) 二. 功能设计 ...
最新文章
- 视觉深度伪造检测技术综述
- 键盘上的F1,F2,……,F12的各功能介绍
- java tika pdf转图片_使用tika将pdf转为html
- [html] 你认为Html的术难点在哪?
- 8款最受欢迎的HTML5/CSS3应用及代码
- bp神经网络数字识别matlab_基于Matlab的BP神经网络识别26个英文字母
- Cocos2d—X游戏开发之VS2010 控制台输出中文,模拟器中文乱码问题解决
- java8 求list最大值
- 阿里云云计算 7 ECS的产品优势
- 完整的连接器设计手册_连接器卧式插拔力的测试介绍
- 链接了GitHub的文件,在Pycharm不同颜色的不同含义
- 分布式文件系统MinIO
- 编程(代码、软件)规范(适用嵌入式、单片机、上位机等)
- Blender:导入obj渲染及导出图片+深度图+法向图
- Stata:离群值!离群值?离群值!
- 暑假集训日记(四)(长题解)
- java年轻代和年老代默认比值_JAVA中的GC以及年轻代,年老代,持久代的认识
- android期末课设选题_基于本科计算机安卓android毕业设计选题题目
- 2016年美国数学建模比赛(MCM/ICM) E题环境科学 Are we heading towards a thirsty planet? 人工精准翻译。...
- arm5718的ipc-dsp,ipc-ipu通讯
热门文章
- linux ping策略打开_linux ping策略打开_如何在Linux服务器禁止和开启ping包 互联网技术圈 互联网技术圈......
- python diff函数_使用Python创建你自己的diff工具
- iis 改了php ini不生效,Windows IIS 集成PHP时修改PHP.ini 配置后不生效问题
- 松下a6伺服驱动连接光栅尺_FANUC常见伺服报警及故障解决方法
- 计算机网络-基本概念(6)【网络层】-某PN和NAT
- zeppelin安装使用
- spark-sql执行时报错:
- 韩国最新「美女元宇宙」引爆Reddit!最强换脸神器美女自拍一键转漫画
- 用 Python 控制你的鼠标和键盘,然后爱怎么玩怎么玩
- 现在还有没有人不学 Python 的?