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

QT5.15.2下调用Python脚本的C++应用Android编译失败求助

解决QT C++调用Python脚本的Android构建失败问题

1. 交叉编译Python for Android

报错核心原因是你当前使用的是Ubuntu x86架构的Python头文件和库,而Android为ARM架构,必须交叉编译对应架构的Python版本:

  • 下载与Ubuntu本地匹配的Python 3.8.x源码包,解压到本地目录
  • 安装Android NDK r21e(QT5.15.2对该版本兼容性最佳),解压到本地路径(如~/android-ndk-r21e)
  • 配置交叉编译环境变量:
    export NDK_ROOT=~/android-ndk-r21e
    export TOOLCHAIN=$NDK_ROOT/toolchains/llvm/prebuilt/linux-x86_64
    export TARGET=armv7a-linux-androideabi
    export API=21 # 可根据需求调整最低支持的Android API版本
    export AR=$TOOLCHAIN/bin/arm-linux-androideabi-ar
    export CC=$TOOLCHAIN/bin/$TARGET$API-clang
    export AS=$CC
    export CXX=$TOOLCHAIN/bin/$TARGET$API-clang++
    export LD=$TOOLCHAIN/bin/arm-linux-androideabi-ld
    export RANLIB=$TOOLCHAIN/bin/arm-linux-androideabi-ranlib
    export STRIP=$TOOLCHAIN/bin/arm-linux-androideabi-strip
    export PATH=$TOOLCHAIN/bin:$PATH
    
  • 进入Python源码目录,执行配置命令(禁用不必要功能以减少编译体积):
    ./configure --host=$TARGET --build=x86_64-linux-gnu --prefix=~/python-android-arm --enable-shared --disable-ipv6 --without-ensurepip --disable-test-modules
    
  • 编译并安装:
    make -j$(nproc)
    make install
    
    完成后,~/python-android-arm目录下会生成include/python3.8(头文件)和lib/libpython3.8.so(动态库)

2. 修改QT项目文件(.pro)

针对桌面和Android平台做条件编译,避免共用x86架构的Python路径:

# Ubuntu桌面平台配置
unix:!android {
    INCLUDEPATH = /usr/include/python3.8
    LIBS += -lpython3.8
}

# Android平台配置
android {
    # 指向交叉编译后的Python头文件路径
    INCLUDEPATH = ~/python-android-arm/include/python3.8
    # 指向交叉编译后的Python动态库
    LIBS += -L~/python-android-arm/lib -lpython3.8
    # 将Python动态库打包到APK的lib目录
    ANDROID_EXTRA_LIBS += ~/python-android-arm/lib/libpython3.8.so
}

3. 配置QT Creator的Android构建套件

  • 打开QT Creator,进入工具 > 选项 > 设备 > Android,确认NDK路径指向安装的r21e版本,SDK路径配置正确
  • 进入工具 > 选项 > 构建和运行 > 套件,确保Android构建套件(如Android for armeabi-v7a (GCC, Qt 5.15.2))的编译器、调试器正确关联NDK工具链
  • 在项目构建配置中选择对应的Android套件,清理旧构建文件后重新构建

4. 额外注意事项

  • 若需调用第三方Python库,需同步交叉编译对应ARM版本,放入Python的site-packages目录或APK的assets目录,运行时指定Python的sys.path
  • 若脚本需读取本地文件,需在Android权限配置中添加文件访问权限
  • 若出现动态库依赖问题,可使用readelf -d libpython3.8.so查看依赖,确保所有依赖库都已打包到APK中

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 20:27:55