【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 (buildd@lcy01-30) (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】