Сборка grpc C ++ для Android с использованием компилятора ndk arm-linux-androideabi-clang ++ - PullRequest
0 голосов
/ 05 января 2019

Я пытаюсь выполнить кросс-компиляцию grpc C ++ (https://github.com/grpc/grpc) для Android из Ubuntu с помощью компилятора Android NDK CLANG (arm-linux-androideabi-clang ++).

Я попробовал ниже способ скомпилировать его для Android.

export PATH=/root/Android/arm-26-toolchain-clang/bin:$PATH
export SYSROOT=/root/Android/arm-26-toolchain-clang/sysroot
export CC="arm-linux-androideabi-clang --sysroot $SYSROOT"
export CXX="arm-linux-androideabi-clang++ --sysroot $SYSROOT"


make CFLAGS='-std=c11 -march=armv7-a -D__ANDROID_API__=26' CXXFLAGS='- std=c++11 -frtti -fexceptions -march=armv7-a -D__ANDROID_API__=26' LIBS='-llog -lz -lc++_static' -j2

Выдает ошибку при компиляции zlib.c - ошибка: неявное объявление функции 'lseek' недействителен в C99

Как указать сборку с использованием C11 с использованием вышеуказанного компилятора CLANG?

Когда я позволил ему двигаться вперед, игнорируя эту ошибку, он остановился на уровне ниже -

./src/core/lib/surface/completion_queue.h:92:5: error: unknown type name
  'grpc_experimental_completion_queue_functor'
 grpc_experimental_completion_queue_functor* shutdown_callback);

Я пытался скомпилировать пример из https://github.com/grpc/grpc/tree/master/examples/android/helloworld, но он выдает ошибку при компиляции boringssl.

Не могли бы вы помочь кросс-компиляции gRPC для Android для toolchain arm-linux-androideabi?

Спасибо

Ответы [ 2 ]

0 голосов
/ 18 января 2019

Вы можете создавать библиотеки grpc, используя cmake toolchain:

cd <your build directory>
export ANDROID_NDK=<path to your NDK>
cmake <path to your grpc source directory>\
 -DCMAKE_TOOLCHAIN_FILE=${ANDROID_NDK}/build/cmake/android.toolchain.cmake\
 -DANDROID_ABI=armeabi-v7a\
 -DANDROID_PLATFORM=android-26\
 -DANDROID_STL=c++_static\
 -DRUN_HAVE_STD_REGEX=0\
 -DRUN_HAVE_POSIX_REGEX=0\
 -DRUN_HAVE_STEADY_CLOCK=0\
 -DCMAKE_BUILD_TYPE=Release
cmake --build . --target grpc++

Когда сборка завершена, должны быть созданы все необходимые статические библиотеки:

find . -type f -name "*.a"
./libgrpc.a
./third_party/zlib/libz.a
./third_party/cares/cares/lib/libcares.a
./third_party/boringssl/crypto/libcrypto.a
./third_party/boringssl/ssl/libssl.a
./third_party/protobuf/libprotobuf.a
./libgpr.a
./libaddress_sorting.a
./libgrpc++.a
0 голосов
/ 07 января 2019

Я мог бы собрать его, следуя инструкциям кросс-компиляции в Makefile в репозитории grpc github. Создал скрипт оболочки, как показано ниже, и он работал -

export GRPC_CROSS_COMPILE=true
export PATH=/home/ubuntu/stand-alone-toolchain/arm-26-toolchain-clang/bin:$PATH
export SYSROOT=/home/ubuntu/stand-alone-toolchain/arm-26-toolchain-clang/sysroot
export HOST_CC="/usr/bin/gcc"
export HOST_CXX="/usr/bin/g++"
export HOST_LD="/usr/bin/ld"
export CC="arm-linux-androideabi-clang --sysroot $SYSROOT"
export CXX="arm-linux-androideabi-clang++ --sysroot $SYSROOT"
export LD="arm-linux-androideabi-clang++"
export LDXX="arm-linux-androideabi-clang++" 
export AR="arm-linux-androideabi-ar"
export STRIP="arm-linux-androideabi-strip"
export PROTOBUF_CONFIG_OPTS="--host=arm-linux-androideabi --with-sysroot=${SYSROOT} --with-protoc=/usr/local/bin/protoc CFLAGS='-march=armv7-a -D__ANDROID_API__=26' CXXFLAGS='-frtti -fexceptions -march=armv7-a -D__ANDROID_API__=26' LIBS='-llog -lz -lc++_static'"
export HAS_PKG_CONFIG=false
export GRPC_CROSS_LDOPTS="-L$SYSROOT -L/home/ubuntu/cross-grpc/grpc"
export GRPC_CROSS_AROPTS="rc --target=elf32-little"

make
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...