天天看點

libuv編譯Linux,OS X下 Android NDK 編譯 libuv

準備工作

1、安裝 NDK 下載下傳對應版本,并添加安裝路徑至環境變量 (我用的是NDK14 rb,貌似最新的NDK編譯有問題)

2、下載下傳libuv 源碼,并解壓,我下載下傳的版本是v1.11.0 這裡提一句,貌似v1.12.0版本生成的Makefile貌似有一行有誤,需要修改下,才能編譯成功

下載下傳安裝gyp

進入解壓目錄

git clone https://chromium.googlesource.com/external/gyp.git build/gyp

cd build/gyp

pip install setuptools

sudo python setup.py install

通常情況下就安裝好了然後回到解壓目錄下,修改android-configure,很遺憾,README裡面官方給出的方案并不能直接運作。編譯arm架構的腳本如下

#!/bin/bash

export TOOLCHAIN=$PWD/android-toolchain

mkdir -p $TOOLCHAIN

$1/build/tools/make-standalone-toolchain.sh \

--toolchain=arm-linux-androideabi-4.9 \

--arch=arm \

--install-dir=$TOOLCHAIN \

--platform=android-14 \

--force

export PATH=$TOOLCHAIN/bin:$PATH

export AR=arm-linux-androideabi-ar

export CC=arm-linux-androideabi-gcc

export CXX=arm-linux-androideabi-g++

export LINK=arm-linux-androideabi-g++

export PLATFORM=android

export ARCH_FLAGS="-mthumb"

export ARCH_LINK=

export CPPFLAGS=" ${ARCH_FLAGS} -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64 "

export CXXFLAGS=" ${ARCH_FLAGS} -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64 -frtti -fexceptions "

export CFLAGS=" ${ARCH_FLAGS} -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64 "

export LDFLAGS=" ${ARCH_LINK} "

if [[ $2 == 'gyp' ]]

then

./gyp_uv.py -Dtarget_arch=arm -DOS=android -f make-android

fi

退出儲存以後 運作

source ./android-configure $NDK gyp && make -C out

在out/Debug目錄下就會有生成好的 libuv.a

生成arm64-v8a架構的靜态庫

#!/bin/bash

export TOOLCHAIN=$PWD/android-toolchain

mkdir -p $TOOLCHAIN

$1/build/tools/make-standalone-toolchain.sh \

--toolchain=aarch64-linux-android-4.9 \

--arch=arm64 \

--install-dir=$TOOLCHAIN \

--platform=android-21 \

--force

export PATH=$TOOLCHAIN/bin:$PATH

export AR=aarch64-linux-android-ar

export CC=aarch64-linux-android-gcc

export CXX=aarch64-linux-android-g++

export LINK=aarch64-linux-android-g++

export PLATFORM=android

export ARCH_FLAGS=

export ARCH_LINK=

export CPPFLAGS=" ${ARCH_FLAGS} -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64 "

export CXXFLAGS=" ${ARCH_FLAGS} -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64 -frtti -fexceptions "

export CFLAGS=" ${ARCH_FLAGS} -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64 "

export LDFLAGS=" ${ARCH_LINK} "

if [[ $2 == 'gyp' ]]

then

./gyp_uv.py -Dtarget_arch=arm64 -DOS=android -f make-android

fi

armv7a的

#!/bin/bash

export TOOLCHAIN=$PWD/android-toolchain

mkdir -p $TOOLCHAIN

$1/build/tools/make-standalone-toolchain.sh \

--toolchain=arm-linux-androideabi-4.9 \

--arch=arm \

--install-dir=$TOOLCHAIN \

--platform=android-14 \

--force

export PATH=$TOOLCHAIN/bin:$PATH

export AR=arm-linux-androideabi-ar

export CC=arm-linux-androideabi-gcc

export CXX=arm-linux-androideabi-g++

export LINK=arm-linux-androideabi-g++

export PLATFORM=android

export ARCH_FLAGS="-march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16"

export ARCH_LINK="-march=armv7-a -Wl,--fix-cortex-a8"

export CPPFLAGS=" ${ARCH_FLAGS} -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64 "

export CXXFLAGS=" ${ARCH_FLAGS} -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64 -frtti -fexceptions "

export CFLAGS=" ${ARCH_FLAGS} -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64 "

export LDFLAGS=" ${ARCH_LINK} "

if [[ $2 == 'gyp' ]]

then

./gyp_uv.py -Dtarget_arch=arm -DOS=android -f make-android

fi