iperf3 arm交叉编译补充
【Android免费音乐下载app】【佳语音乐下载】写这个app完全出于对个人爱好。建议最少2.0.3版本
https://gitlab.com/gaopinqiang/checkversion/raw/master/Music_Download.apk
下面是记录iperf3源码在linux下使用android ndk交叉编译可执行文件的步骤。
系统版本:【cat /proc/version】
Linux szxphispra14104 4.4.0-62-generic #83-Ubuntu SMP Wed Jan 18 14:10:15 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
系统位数:【uname -a】
Linux version 4.4.0-62-generic (aaa@qq.com) (gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.4) ) #83-Ubuntu SMP Wed Jan 18 14:10:15 UTC 2017
1、iperf3源码下载地址;
下载地址:http://software.es.net/iperf/news.html#iperf-3-7-released
2、下载ndk包
下载地址:https://developer.android.google.cn/ndk/downloads/
最新的是 android-ndk-r21-linux-x86_64.zip ,这个里面是使用clang编译的。编译中遇到问题。暂时使用之前版本使用gcc编译。
使用的ndk版本为:android-ndk-r14b-linux-x86_64.zip
3、将ndk解压到linux的/data01/ndk/目录中
因为这个压缩文件有800M,需要分卷。将所有分卷ftp下载到本地【get file】.
多个分卷合并成一个【cat android-ndk-r14b.z* > android-ndk-r14b-combo.zip】
root:@pcname:/data01/ndk/#
zip解压命令【unzip android-ndk-r14b-combo.zip】
4、配置环境变量
【vi /etc/profile】
在文件的末尾加上
export NDK=/data01/ndk/android-ndk-r14b
export NDK_CROSS=/data01/ndk/AndroidToolChain/bin
PATH= $ PATH:$ NDK:$ NDK_CROSS
说明下,由于编辑器问题,$是没有空格的
配置完成使其立即生效【source /etc/profile】
说明:在profile配置的是永久环境变量,如果在命令行使用export NDK=/data01/ndk/android-ndk-r14b 是临时的,这个会话结束就失效了。
NDK_CROSS这个是交叉编译工具链的路径
5、生成工具链
【$NDK/build/tools/make-standalone-toolchain.sh --platform=android-23
–arch=arm --install-dir=/data01/ndk/AndroidToolChain/】
如果不是第一次配置就加上 --force参数,例如:
【$NDK/build/tools/make-standalone-toolchain.sh --platform=android-23 --arch=arm --install-dir=/data01/ndk/AndroidToolChain/ --force】
这个时候就自动创建好 /data01/ndk/AndroidToolChain/ 这个目录
如果执行上面的命令没有权限,就使用chmod配置下,例如:
【chmod 777 $NDK/build/tools/make-standalone-toolchain.sh】
将目录及其子目录下的所有文件添加权限命令【chmod -R 777 *】
6、查看交叉编译环境是否OK,可以查看下gcc版本
【arm-linux-androideabi-gcc -v】
Using built-in specs.
COLLECT_GCC=arm-linux-androideabi-gcc
COLLECT_LTO_WRAPPER=/data01/ndk/AndroidToolChain/bin/…/libexec/gcc/arm-linux-androideabi/4.9.x/lto-wrapper
Target: arm-linux-androideabi
Configured with: /usr/local/google/buildbot/src/android/gcc/toolchain/build/…/gcc/gcc-4.9/configure --prefix=/tmp/59719db9ae19ff43aef46bbcb79596b6 --target=arm-linux-androideabi --host=x86_64-linux-gnu --build=x86_64-linux-gnu --with-gnu-as --with-gnu-ld --enable-languages=c,c++ --with-gmp=/buildbot/tmp/build/toolchain/temp-install --with-mpfr=/buildbot/tmp/build/toolchain/temp-install --with-mpc=/buildbot/tmp/build/toolchain/temp-install --with-cloog=/buildbot/tmp/build/toolchain/temp-install --with-isl=/buildbot/tmp/build/toolchain/temp-install --with-ppl=/buildbot/tmp/build/toolchain/temp-install --disable-ppl-version-check --disable-cloog-version-check --disable-isl-version-check --enable-cloog-backend=isl --with-host-libstdcxx=’-static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic -lm’ --disable-libssp --enable-threads --disable-nls --disable-libmudflap --disable-libgomp --disable-libstdc__-v3 --disable-sjlj-exceptions --disable-shared --disable-tls --disable-libitm --with-float=soft --with-fpu=vfp --with-arch=armv5te --enable-target-optspace --enable-bionic-libs --enable-libatomic-ifuncs=no --enable-initfini-array --disable-nls --prefix=/tmp/59719db9ae19ff43aef46bbcb79596b6 --with-sysroot=/tmp/59719db9ae19ff43aef46bbcb79596b6/sysroot --with-binutils-version=2.25 --with-mpfr-version=3.1.1 --with-mpc-version=1.0.1 --with-gmp-version=5.0.5 --with-gcc-version=4.9 --with-gdb-version=none --with-gxx-include-dir=/tmp/59719db9ae19ff43aef46bbcb79596b6/include/c++/4.9.x --with-bugurl=http://source.android.com/source/report-bugs.html --enable-languages=c,c++ --disable-bootstrap --enable-plugins --enable-libgomp --enable-gnu-indirect-function --disable-libsanitizer --enable-gold --enable-threads --enable-eh-frame-hdr-for-static --enable-graphite=yes --with-isl-version=0.11.1 --with-cloog-version=0.18.0 --with-arch=armv5te --program-transform-name=‘s&^&arm-linux-androideabi-&’ --enable-gold=default
Thread model: posix
gcc version 4.9.x 20150123 (prerelease) (GCC)
可以通过一个简单c程序测试
#include<stdio.h>
int main(){
printf("hi,android\n");
return 0;
}
【arm-linux-androideabi-gcc test.c -o test】正常应该会输出 test文件出来
【file test】查看就是一个arm类型的文件
如果是linux下使用,就直接使用
【gcc test.c -o test】
【./test】就可以直接运行了
7、将下载好的iperf源码解压到linux本地
tar.gz格式使用tar命令解压
【tar -xvf iperf-3.7.tar.gz】
8、进入iperf目录,输入命令
【./configure --host=arm-linux CC=arm-linux-androideabi-gcc CXX=arm-linux-androideabi-g++ CFLAGS="-static -fPIC" CXXFLAGS="-static" LDFLAGS="-pie -fuse-ld=bfd"】
生成Makefile文件
9、编译make
【make】
正常不报错就会在src目录生成iperf3的执行文件
10、正常生成的iperf3在app是运行不起来的,需要改些配置
iperf3.3需要修改net.c
--#include <sys/fcntl.h>
++#include <fcntl.h>
包名修改
--tempdir = "/tmp";
++tempdir = "/data/data/com.example.test";
============================================
编译中遇到的一些问题及解决方法:
1、运行遇到“fatal error: stdio.h: No such file or directory”
安装下这个【sudo apt-get install build-essential】
2、遇到“Linux gnu/stubs-32.h: No such file or directory”
安装下【sudo apt-get install libc6-dev-i386】
后面发现这个搜索的库是用到/usr/include/里面,其实ndk中有这些文件的。具体修改默认的搜索路径还不清楚。
正常make打印没有看到-I/usr/include ,但是有问题的就会有。说明有问题的make编译并没有从ndk中搜索对应的头文件,导致报错。
通过对比./configure 后的输出文件。生成的Makefile文件和config.status文件内容不一样。通过测试发现修改config.status里面的配置(使用Compare对比)
3、修改config.status文件编译通过,修改点
a.通过vi的【/OPENSSL】定位
S["OPENSSL_LDFLAGS"]="-L/usr/lib"
S["OPENSSL_LIBS"]="-lssl -lcrypto"
S["OPENSSL_INCLUDES"]="-I/usr/include"
修改为:
S["OPENSSL_LDFLAGS"]=""
S["OPENSSL_LIBS"]=""
S["OPENSSL_INCLUDES"]=""
b.通过vi的【/CPPFLAGS】定位
S["CPPFLAGS"]="-I/usr/include "
S["LDFLAGS"]="-pie -fuse-ld=bfd -L/usr/lib"
修改为:
S["CPPFLAGS"]=" "
S["LDFLAGS"]="-pie -fuse-ld=bfd "
c.
S["LIBS"]="-lssl -lcrypto -lm "
修改为:
S["LIBS"]=" -lm "
再次make成功。
如果不成功可以尝试【make distclean】 再运行【./configure ...】,修改config.status配置, 【make】
========================================
编译过程中使用到的一些linux命令和vi命令
vi一些实用操作命令
- 设置显示行号【:set nu】
- 跳转到文件指定行【:100】
- 跳转到指定字符位置【/keyword】n查看下一个结果,N查看上一个结果
linux一些实用的操作命令
-
压缩命令【tar -czvf test.tar.gz test】
-
查找一个文件的路径【find / -name test.c】
-
查看已安装的软件【dpkg --list】
-
配置环境变量【export PATH=/data01/android-ndk/AndroidToolChain/bin:$PATH】
-
安装软件【sudo apt-get install gcc-arm-linux-gnueabi】
-
卸载软件
【sudo apt-get --purge remove gcc-arm-linux-gnueabi】卸载并删除配置
【sudo apt-get autoremove gcc-arm-linux-gnueabi】卸载并删除依赖包 -
查看命令路径位置【whereis arm-linux-androideabi-gcc】
-
查看环境变量【export -p】
上一篇: 搭建 Apache Jmeter 分布式压测与监控
下一篇: 测试管理工具-禅道篇
推荐阅读
-
iperf3 arm交叉编译补充
-
arm交叉编译器的常用工具集简介
-
关于在linux交叉编译出适用于树莓派ARM架构的可执行程序
-
流媒体直播之二imx6 arm板的live555的交叉编译
-
arm-Xilinx-linux-gnuieabi 交叉编译环境搭建
-
组装SDK之arm交叉编译器的制作
-
Centos7 交叉编译Arm环境(海思3559A平台)下的openssl-1.0.2r
-
arm-linux---ONVIF标准下SOAP简单对象访问协议gsoap工具的交叉编译
-
如何在 Ubuntu 上交叉编译 ARM 架构的 CGO 程序
-
【complier】如何查看ARM交叉编译的可执行程序依赖的动态库?