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
相关产品推荐
相关产品推荐

