编译android版本llvm编译器

本文详细介绍了如何在Ubuntu20.04系统上编译适用于Android的arm版本LLVM15.0.7编译器。主要步骤包括下载源码、修改CMake脚本以适应Android环境、配置NDK、创建并执行编译脚本,以及解决编译过程中遇到的链接错误和依赖问题。最后提到了在Android设备上运行编译器时可能遇到的头文件缺失和ld工具问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

编译android版本llvm编译器

准备

编译环境:ubuntu 20.04.2
编译器版本:ndk-24.0.8215888
llvm版本: 15.0.7

最近需要在android上编译C++项目,需要在android上使用arm版本的编译工具

1. 下载需要版本的llvm,切换到指定版本 本人编译的15.0.7

git clone --recursive https://github.com/llvm/llvm-project

2. 修改CMake脚本屏蔽Pass相关链接错误

    cd llvm-project/llvm/lib/Transforms
  • 修改CMakeLists.txt 如下:
    add_llvm_library( LLVMHello MODULE BUILDTREE_ONLY
  Hello.cpp

  DEPENDS
  intrinsics_gen
  PLUGIN_TOOL
  opt
  )
  
  ==>> 改为:
  if(NOT ANDROID)
        add_llvm_library( LLVMHello MODULE BUILDTREE_ONLY
          Hello.cpp

          DEPENDS
          intrinsics_gen
          PLUGIN_TOOL
          opt
          )
    endif()
    cd llvm-project/llvm/tools/bugpoint-passes
  • 修改CMakeLists.txt 文件如下:
    add_llvm_library( BugpointPasses MODULE BUILDTREE_ONLY
  TestPasses.cpp

  DEPENDS
  intrinsics_gen
  bugpoint
  )
  
  ==>> 改为:
  if(NOT ANDROID)
        add_llvm_library( BugpointPasses MODULE BUILDTREE_ONLY
          TestPasses.cpp

          DEPENDS
          intrinsics_gen
          bugpoint
          )
  endif()
    cd llvm/examples/Bye
  • 修改CMakeLists.txt 文件如下:
      add_llvm_pass_plugin(Bye
    Bye.cpp
    DEPENDS
    intrinsics_gen
    BUILDTREE_ONLY
   )

  install(TARGETS ${name} RUNTIME DESTINATION "${LLVM_EXAMPLES_INSTALL_DIR}")
  set_target_properties(${name} PROPERTIES FOLDER "Examples")
  
  ==>>改为:
  if (NOT WIN32 AND NOT ANDROID)
          add_llvm_pass_plugin(Bye
            Bye.cpp
            DEPENDS
            intrinsics_gen
            BUILDTREE_ONLY
           )

          install(TARGETS ${name} RUNTIME DESTINATION "${LLVM_EXAMPLES_INSTALL_DIR}")
          set_target_properties(${name} PROPERTIES FOLDER "Examples")
        endif()

3. 下载android ndk 配置到环境变量

    export ANDROID_NDK=/home/feiker/Android/Sdk/ndk/24.0.8215888/

4. 编辑shell文件 build_android.sh

    build_llvm=`pwd`/build-llvm
    build_clang=`pwd`/build-clang
    installprefix=`pwd`/install
    LLVM_DIR=`pwd`/llvm-project

    mkdir -p $build_llvm
    mkdir -p $installprefix

    cmake -G Ninja -S $LLVM_DIR/llvm -B $build_llvm \
          -DLLVM_INSTALL_UTILS=ON -DLLVM_ENABLE_PROJECTS="clang;libcxx;libcxxabi" \
          -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK/build/cmake/android.toolchain.cmake \
          -DANDROID_ABI="arm64-v8a" -DANDROID_PLATFORM=android-24 \
          -DCMAKE_INSTALL_PREFIX=$installprefix \
          -DLLVM_INCLUDE_TESTS=OFF \
          -DLLVM_BUILD_TESTS=OFF \
          -DLLVM_INCLUDE_BENCHMARKS=OFF \
          -DCMAKE_BUILD_TYPE=Release

    ninja -C $build_llvm install -j19

5. 执行编译脚本

    sh build_android.sh

6. 拷贝到android并运行

  //连接设备
  adb connect 192.19.0.89
  //拷贝到设备上
     adb push ./install /data/local/tmp
     
     //编译cpp文件,报错提示一些头文件不存在
     ./bin/clang++ main.cc -I include/c++/v1
     
     //拷贝sysroot目录下的usr文件夹到install目录
     adb push sysroot/usr /data/local/tmp/install/
     
     //执行
     ./bin/clang++ main.cc -I include/c++/v1 -I usr/include -I usr/local/include -I usr/include/aarch64-linux-android
     
     //提示ld工具找不到
     需要arm64版本的binutils工具,参考另一篇博客编译android版本binutils
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

telllong

你的鼓励是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值