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

Ubuntu下编译Qt 5.15 for Android遇crtbegin_so.o等文件找不到错误

问题分析与解决方案

1. 关于find命令无法搜索NDK子目录的问题

这大概率是WSL2的文件系统挂载权限/特性导致的,而非Android NDK本身的问题:

  • 如果你的NDK目录放在Windows挂载分区(比如/mnt/c、/mnt/d)下,WSL2对Windows文件系统的符号链接、权限处理存在兼容性问题,find命令可能无法正常遍历目录结构。
  • 验证方法:将NDK目录移动到WSL2原生Linux文件系统(比如~/android-ndk-r21e),再执行find命令即可正常遍历所有文件。

2. Qt Configure找不到链接库的根源

Qt 5.15对NDK r21e的适配需要严格的环境变量和配置参数,并非Qt或Android的bug,核心原因是配置时未正确指定NDK完整路径,或环境变量未正确传递:

  • Qt的configure脚本依赖ANDROID_NDK_ROOT环境变量定位NDK,若该变量指向的路径存在层级问题(比如包含Windows风格路径、挂载路径权限异常),脚本无法正确解析NDK内的库路径。
  • NDK r21e的库文件路径结构为$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/[arch]/,Qt需要根据你指定的ANDROID_ABIS参数自动匹配对应架构的库路径,若架构参数不匹配,也会导致文件找不到。

3. 无需符号链接的解决步骤

  • 迁移NDK到WSL原生文件系统
    把android-ndk-r21e从Windows挂载目录复制到WSL的~目录下,规避文件系统兼容性问题:
    cp -r /mnt/d/android-ndk-r21e ~/
    
  • 严格设置环境变量
    在终端执行以下命令(或写入~/.bashrc永久生效):
    export ANDROID_SDK_ROOT=/path/to/your/android-sdk
    export ANDROID_NDK_ROOT=~/android-ndk-r21e
    export ANDROID_API_LEVEL=31
    export ANDROID_ABIS="armeabi-v7a arm64-v8a x86 x86_64"
    
  • 重新执行configure命令
    用明确参数指定NDK路径,避免脚本自动探测出错:
    ./configure -prefix ~/qt-android-build \
      -android-sdk $ANDROID_SDK_ROOT \
      -android-ndk $ANDROID_NDK_ROOT \
      -android-api-level $ANDROID_API_LEVEL \
      -android-abis $ANDROID_ABIS \
      -opensource -confirm-license \
      -nomake tests -nomake examples
    

4. 是否属于Bug?

这不属于Qt或Android NDK的原生Bug,而是WSL2跨文件系统的兼容性问题叠加Qt配置脚本对路径解析的严格要求导致的偶发适配问题。Qt 5.15发布时WSL2生态还不完善,官方未针对WSL2下的Windows挂载目录做特殊兼容处理,因此出现了路径解析异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 15:57:10