android - 使用 ndk arm-linux-androideabi-clang++ 编译器为 android 构建 grpc C++

标签 android c++ build arm grpc

我正在尝试使用 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/

相关文章:

android - IonDrawable 无法转换为 android.graphics.drawable.BitmapDrawable

c++ - 以下4种调用其他成员方法的方式有什么区别?

c++ - 返回时指针的值是垃圾

c++ - 在 std::set 容器中使用常量字符指针:内存消耗

java - 无法在eclipse中打开新创建的Maven项目

reactjs - 在 create-react-app 应用程序中构建bundle.js

android - 如何在iOS设备上运行Android Studio开发的flutter应用?

java - 重写非 Activity 类中的方法,Android

C++ 单头文件结构

android - 如何将 emit() LiveData 结果发送到现有的 LiveData 对象?