首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android 64 位元 C 程式交叉編譯:確認架構 (arm64/x86_64) 並下載對應 NDK 工具鏈

     編輯:程式設計綜合問答

核心問題

使用 arm-linux-gcc (32 位元 ARMv7 工具鏈) 編譯的程式,在 64 位元 Android 設備上無法執行 (報 Exec format error 或直接 Crash)。

架構判斷與工具鏈選擇

目標架構NDK 工具鏈前綴適用場景
ARM 64 位元 (arm64-v8a)aarch64-linux-android現代手機、平板主流 (ARMv8-A)
x86 64 位元 (x86_64)x86_64-linux-android模擬器、Chrome OS、部分 Intel 手機
ARM 32 位元 (armeabi-v7a)arm-linux-androideabi舊款裝置、相容性測試

獲取正確工具鏈步驟

  1. 前往 Android NDK 下載頁,下載對應平台 (Windows/macOS/Linux) 的最新 LTS 版本 (如 r26d)。
  2. 解壓後,工具鏈位於 $NDK/toolchains/llvm/prebuilt/$HOST/bin/。
  3. 編譯器完整路徑範例 (Linux/macOS):
    $NDK/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android21-clang
    # 尾碼 21 表示 min API level (Android 5.0+)
    

編譯指令範例

# 靜態連結避免 libc++ 依賴問題
aarch64-linux-android21-clang -static -O2 -o myapp_arm64 myapp.c

# 或使用 CMake (推薦)
cmake -DCMAKE_TOOLCHAIN_FILE=$NDK/build/cmake/android.toolchain.cmake \
      -DANDROID_ABI=arm64-v8a \
      -DANDROID_PLATFORM=android-21 \
      ..

驗證二進制架構

file myapp_arm64
# 輸出應包含: ELF 64-bit LSB executable, ARM aarch64

常見坑點

  • API Level 不匹配:工具鏈尾碼 android21 需 ≤ 目標裝置 API,建議統一用 android21 (Android 5.0) 以上。
  • 動態連結 libc++:若用 -static 需確保所有依賴庫皆為靜態;否則打包 libc++_shared.so 進 APK jniLibs/arm64-v8a/。
  • 交叉編譯環境污染:勿混用宿主機 gcc、pkg-config 等,全部使用 NDK 提供的 llvm-objcopy、llvm-strip 等工具。

確認目標 ABI → 下載對應 NDK → 使用 Clang-based 工具鏈 → 驗證 file 輸出,四步走策略確保 64 位元 Android 原生程式順利落地。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved