我正在尝试使用 Android NDK CLANG 编译器 (arm-linux-androideabi-clang++) 从 Ubuntu 交叉编译适用于 Android 的 grpc C++ ( https://github.com/grpc/grpc )。
我试过以下方法为 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 中无效
如何使用上述CLANG编译器指定使用C11构建?
当我忽略这个错误让它继续前进时,它停在了下面 -
./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 时引发错误。
能否请您为工具链 arm-linux-androideabi 交叉编译 gRPC for android?
谢谢
最佳答案
我可以按照 grpc github 存储库中 Makefile 中的交叉编译说明构建它。创建了一个如下所示的 shell 脚本并且它有效 -
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
关于android - 使用 ndk arm-linux-androideabi-clang++ 编译器为 android 构建 grpc C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54052229/