You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

解决Flutter项目中CMake找不到NDK工具链文件的报错问题

解决Flutter中C++编译Android .so库的CMake路径错误问题

问题背景

要在Flutter项目中使用C代码,需将C文件编译为Android环境适用的.so共享库,执行以下CMake命令时持续报错:

cmake -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK/build/cmake/android.toolchain.cmake -G Ninja -DANDROID_NDK=$ANDROID_NDK -DANDROID_ABI=arm64-v8a -DANDROID_PLATFORM=android-30 -Sandroid -Bbin/android/arm64-v8a

错误核心为$ANDROID_NDK路径未被正确解析,导致找不到source.properties文件、编译器工具等。

具体报错信息

cmake -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK/build/cmake/android.toolchain.cmake -G Ninja -DANDROID_NDK=$ANDROID_NDK -DANDROID_ABI=arm64-v8a -DANDROID_PLATFORM=
android-30 -Sandroid -Bbin/android/arm64-v8a
CMake Warning:
  Ignoring extra path from command line:

   "F:/dart ffi/ffiproject/.toolchain.cmake"


CMake Warning at C:/Users/super/AppData/Local/Android/Sdk/ndk/25.1.8937393/build/cmake/android-legacy.toolchain.cmake:51 (message):
  Using custom NDK path (ANDROID_NDK is set): F:/dart
  ffi/ffiproject/android/$ANDROID_NDK
Call Stack (most recent call first):
  C:/Users/super/AppData/Local/Android/Sdk/ndk/25.1.8937393/build/cmake/android.toolchain.cmake:54 (include)
  F:/dart ffi/ffiproject/bin/android/arm64-v8a/CMakeFiles/3.24.1/CMakeSystem.cmake:6 (include)
  CMakeLists.txt:5 (project)


CMake Error at C:/Users/super/AppData/Local/Android/Sdk/ndk/25.1.8937393/build/cmake/android-legacy.toolchain.cmake:64 (file):
  file failed to open for reading (No such file or directory):

    F:/dart ffi/ffiproject/android/$ANDROID_NDK/source.properties
Call Stack (most recent call first):
  C:/Users/super/AppData/Local/Android/Sdk/ndk/25.1.8937393/build/cmake/android.toolchain.cmake:54 (include)
  F:/dart ffi/ffiproject/bin/android/arm64-v8a/CMakeFiles/3.24.1/CMakeSystem.cmake:6 (include)
  CMakeLists.txt:5 (project)


CMake Error at C:/Users/super/AppData/Local/Android/Sdk/ndk/25.1.8937393/build/cmake/android-legacy.toolchain.cmake:69 (message):
  Failed to parse Android NDK revision: F:/dart
  ffi/ffiproject/android/$ANDROID_NDK/source.properties.

Call Stack (most recent call first):
  C:/Users/super/AppData/Local/Android/Sdk/ndk/25.1.8937393/build/cmake/android.toolchain.cmake:54 (include)
  F:/dart ffi/ffiproject/bin/android/arm64-v8a/CMakeFiles/3.24.1/CMakeSystem.cmake:6 (include)
  CMakeLists.txt:5 (project)


CMake Error at C:/Users/super/AppData/Local/Android/Sdk/ndk/25.1.8937393/build/cmake/android-legacy.toolchain.cmake:175 (include):
  include could not find requested file:

    F:/dart ffi/ffiproject/android/$ANDROID_NDK/build/cmake/platforms.cmake
Call Stack (most recent call first):
  C:/Users/super/AppData/Local/Android/Sdk/ndk/25.1.8937393/build/cmake/android.toolchain.cmake:54 (include)
  F:/dart ffi/ffiproject/bin/android/arm64-v8a/CMakeFiles/3.24.1/CMakeSystem.cmake:6 (include)
  CMakeLists.txt:5 (project)


-- The C compiler identification is unknown
-- The CXX compiler identification is unknown
CMake Error at CMakeLists.txt:5 (project):
  The CMAKE_C_COMPILER:

    F:/dart ffi/ffiproject/android/$ANDROID_NDK/toolchains/llvm/prebuilt/windows-x86_64/bin/clang.exe

  is not a full path to an existing compiler tool.

  Tell CMake where to find the compiler by setting either the environment
  variable "CC" or the CMake cache entry CMAKE_C_COMPILER to the full path to
  the compiler, or to the compiler name if it is in the PATH.


CMake Error at CMakeLists.txt:5 (project):
  The CMAKE_CXX_COMPILER:

    F:/dart ffi/ffiproject/android/$ANDROID_NDK/toolchains/llvm/prebuilt/windows-x86_64/bin/clang++.exe

  is not a full path to an existing compiler tool.

  Tell CMake where to find the compiler by setting either the environment
  variable "CXX" or the CMake cache entry CMAKE_CXX_COMPILER to the full path
  to the compiler, or to the compiler name if it is in the PATH.


-- Configuring incomplete, errors occurred!
See also "F:/dart ffi/ffiproject/bin/android/arm64-v8a/CMakeFiles/CMakeOutput.log".
See also "F:/dart ffi/ffiproject/bin/android/arm64-v8a/CMakeFiles/CMakeError.log".

当前CMakeLists.txt内容

cmake_minimum_required(VERSION 3.0.0)
set(CMAKE_MAKE_PROGRAM "C:/src/ninja-win/ninja.exe" CACHE FILEPATH "" FORCE)
set( CMAKE_CXX_COMPILER g++ )
set( CMAKE_C_COMPILER gcc )
project(ffiproject)
add_library(
    lib
    SHARED
    lib.cpp
)

find_library(
    lib
    log
)
target_link_libraries(
    lib
    ${log_lib}
)

解决方案

1. 确保ANDROID_NDK环境变量正确配置

  • Windows系统中,打开系统属性-高级-环境变量,添加系统变量ANDROID_NDK,值为你的NDK实际安装路径,例如:C:/Users/super/AppData/Local/Android/Sdk/ndk/25.1.8937393
  • 设置完成后,重启所有终端窗口,确保环境变量生效

2. 修正CMake命令中的路径问题

如果环境变量仍未生效,直接用绝对路径替换命令中的$ANDROID_NDK:

cmake -DCMAKE_TOOLCHAIN_FILE=C:/Users/super/AppData/Local/Android/Sdk/ndk/25.1.8937393/build/cmake/android.toolchain.cmake -G Ninja -DANDROID_NDK=C:/Users/super/AppData/Local/Android/Sdk/ndk/25.1.8937393 -DANDROID_ABI=arm64-v8a -DANDROID_PLATFORM=android-30 -Sandroid -Bbin/android/arm64-v8a

3. 修复CMakeLists.txt中的错误

  • 移除手动设置的CMAKE_C_COMPILER和CMAKE_CXX_COMPILER:Android NDK的toolchain会自动配置clang编译器,手动指定g++/gcc会导致冲突
  • 修正find_library的变量名:原变量名lib与目标库名重复,改为log_lib避免命名冲突

修改后的CMakeLists.txt:

cmake_minimum_required(VERSION 3.0.0)
set(CMAKE_MAKE_PROGRAM "C:/src/ninja-win/ninja.exe" CACHE FILEPATH "" FORCE)
project(ffiproject)
add_library(
    lib
    SHARED
    lib.cpp
)

find_library(
    log_lib
    log
)
target_link_libraries(
    lib
    ${log_lib}
)

4. 清理旧构建缓存

删除bin/android/arm64-v8a目录,重新执行CMake命令,避免缓存中的错误路径干扰构建流程

内容的提问来源于stack exchange,提问作者Noob Coder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 08:21:57