硬件环境:华硕thinkerboard (Android os)
首先需要使用NDK进行交叉编译, 编译环境使用ubuntu 14.04 64位, android ndk版本为r14b, python版本为2.7.9
设置编译环境
- 编译主机版本,创建"Parser/pgen"
- ./configure
- . make
- make install
- export ANDROID_NDK="/usr/local/android/android-ndk-r14b"
- export PATH="$ANDROID_NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/:$ANDROID_NDK:$ANDROID_NDK/tools:/usr/local/bin:/usr/bin:/bin:$PATH"
- export ARCH="armeabi"
- export CFLAGS="-DANDROID -mandroid -fomit-frame-pointer --sysroot=$ANDROID_NDK/platforms/android-21/arch-arm"
- export CXXFLAGS="$CFLAGS"
- export CC="arm-linux-androideabi-gcc $CFLAGS"
- export CXX="arm-linux-androideabi-g++ $CXXFLAGS"
- export AR="arm-linux-androideabi-ar"
- export RANLIB="arm-linux-androideabi-ranlib"
- export STRIP="arm-linux-androideabi-strip --strip-unneeded"
- export READELF="arm-linux-androideabi-readelf"
- export MAKE="make -j4 CROSS_COMPILE_TARGET=yes"
- export CONFIG_SITE="config.site"
- export ANDROID_NDK="/usr/local/android/android-ndk-r14b"
- export PATH="$ANDROID_NDK/toolchains/x86-4.9/prebuilt/linux-x86_64/bin/:$ANDROID_NDK:$ANDROID_NDK/tools:/usr/local/bin:/usr/bin:/bin:$PATH"
- export ARCH="x86"
- export CFLAGS="-DANDROID -mandroid -fomit-frame-pointer --sysroot=$ANDROID_NDK/platforms/android-21/arch-x86"
- export CXXFLAGS="$CFLAGS"
- export CC="i686-linux-android-gcc $CFLAGS"
- export CXX="i686-linux-android-g++ $CXXFLAGS"
- export AR="i686-linux-android-ar"
- export RANLIB="i686-linux-android-ranlib"
- export STRIP="i686-linux-android-strip --strip-unneeded"
- export READELF="i686-linux-android-readelf"
- export MAKE="make -j4 CROSS_COMPILE_TARGET=yes"
- export CONFIG_SITE="config.site"
- export ANDROID_NDK="/usr/local/android/android-ndk-r14b"
- export PATH="$ANDROID_NDK/toolchains/x86_64-4.9/prebuilt/linux-x86_64/bin/:$ANDROID_NDK:$ANDROID_NDK/tools:/usr/local/bin:/usr/bin:/bin:$PATH"
- export ARCH="x86_64"
- export CFLAGS="-DANDROID -mandroid -fomit-frame-pointer --sysroot=$ANDROID_NDK/platforms/android-21/arch-x86_64"
- export CXXFLAGS="$CFLAGS"
- export CC="x86_64-linux-android-gcc $CFLAGS"
- export CXX="x86_64-linux-android-g++ $CXXFLAGS"
- export AR="x86_64-linux-android-ar"
- export RANLIB="x86_64-linux-android-ranlib"
- export STRIP="x86_64-linux-android-strip --strip-unneeded"
- export READELF="x86_64-linux-android-readelf"
- export MAKE="make -j4 CROSS_COMPILE_TARGET=yes"
- export CONFIG_SITE="config.site"
- export ANDROID_NDK="/usr/local/android/android-ndk-r14b"
- export PATH="$ANDROID_NDK/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/:$ANDROID_NDK:$ANDROID_NDK/tools:/usr/local/bin:/usr/bin:/bin:$PATH"
- export ARCH="arm64"
- export CFLAGS="-DANDROID -mandroid -fomit-frame-pointer --sysroot=$ANDROID_NDK/platforms/android-21/arch-arm64"
- export CXXFLAGS="$CFLAGS"
- export CC="aarch64-linux-android-gcc $CFLAGS"
- export CXX="aarch64-linux-android-g++ $CXXFLAGS"
- export AR="aarch64-linux-android-ar"
- export RANLIB="aarch64-linux-android-ranlib"
- export STRIP="aarch64-linux-android-strip --strip-unneeded"
- export READELF="aarch64-linux-android-readelf"
- export MAKE="make -j4 CROSS_COMPILE_TARGET=yes"
- export CONFIG_SITE="config.site"
应用补丁代码
- 下载 : starpython-2.7.9.android.patch
- patch -p0 -i starpython-2.7.9.android.patch
编译
- 配置(armeabi)
- ./configure LDFLAGS="-Wl,--allow-shlib-undefined -llog" CFLAGS="-mandroid -fomit-frame-pointer -Wno-format" --host=arm-linux --build=i686-pc-linux-gnu --enable-shared --prefix="/usr/local/android/install/python279.armeabi" --disable-ipv6
- ./configure LDFLAGS="-Wl,--allow-shlib-undefined -llog" CFLAGS="-mandroid -fomit-frame-pointer -Wno-format" --host=i686-linux --build=i686-pc-linux-gnu --enable-shared --prefix="/usr/local/android/install/python279.x86" --disable-ipv6
- ./configure LDFLAGS="-Wl,--allow-shlib-undefined -llog" CFLAGS="-mandroid -fomit-frame-pointer -Wno-format" --host=x86_64-linux --build=i686-pc-linux-gnu --enable-shared --prefix="/usr/local/android/install/python279.x86_64" --disable-ipv6
- ./configure LDFLAGS="-Wl,--allow-shlib-undefined -llog" CFLAGS="-mandroid -fomit-frame-pointer -Wno-format" --host=aarch64-linux --build=i686-pc-linux-gnu --enable-shared --prefix="/usr/local/android/install/python279.aarch64" --disable-ipv6
_socket socketmodule.c #timemodule.c
./make
如果出现错误,请拷贝主机版本的"Parser/pgen"到编译目录
./make install编译会生成 bin 、lib 、include、share文件
如果需要安装 yaml库
安装PyYaml
下载地址https://github.com/yaml/pyyaml
然后将其lib3\yaml包,放在python安装包lib包下,然后命令行监测是否安装成功即可
参考链接:http://www.srplab.com/cn/files/others/compile/cross_compiling_python_for_android.html
https://blog.csdn.net/ueillemmx/article/details/43955495
https://blog.csdn.net/u013210620/article/details/78618295