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

如何在Windows QtCreator中构建可供Android项目调用的C++共享库

问题根源

你遇到的报错本质是链接的libmylibc.so文件格式和当前Qt项目的编译目标架构/平台不匹配,链接器无法识别该文件,具体操作错误点如下:

  • 编译MyLibC用的工具链和Qt项目的目标平台不匹配:你自定义的toolchain.cmake指定了Linux系统、普通gcc/g++编译器,编译出来的是PC端Linux x86/amd64架构的so文件,既不能给Android arm架构用,也不能给Windows平台用。
  • .pro文件配置错误:Windows平台下直接将dll写入LIBS配置项,没有使用对应的导入库进行链接;同时没有单独区分Android和普通Linux平台的配置,容易出现配置冲突。

解决步骤

场景1:编译Android版本的Qt项目

  1. 替换MyLibC的交叉编译工具链:不要用自定义的toolchain.cmake,直接使用NDK官方提供的CMake工具链,CMake启动参数修改为:
cmake -DCMAKE_TOOLCHAIN_FILE=你的NDK安装路径/build/cmake/android.toolchain.cmake \
-DANDROID_ABI=armeabi-v7a \ # 和Qt Android套件的ABI一致,可选arm64-v8a等
-DANDROID_PLATFORM=android-21 \ # 和Qt的目标安卓版本匹配
-DANDROID_NDK=你的NDK安装路径 \
..
  1. 编译得到对应Android架构的libmylibc.so文件后,替换项目中lib目录下的so文件。
  2. 修正.pro文件的平台区分配置:
# 全局链接配置通用,不需要分平台写多次
LIBS += -L"$$_PRO_FILE_PWD_/lib" -lmylibc
INCLUDEPATH += "$$_PRO_FILE_PWD_/include"

android {
    ANDROID_EXTRA_LIBS=$$_PRO_FILE_PWD_/lib/libmylibc.so
}

win32 {
    # Windows下不需要单独加dll到LIBS,自动链接对应.a导入库
}

unix:!android {
    # 普通Linux平台的额外配置写在这里
}

场景2:编译Windows版本的Qt项目

  1. 重新编译MyLibC,不需要使用Linux交叉编译工具链,直接用和Qt套件一致的MinGW 8.1.0 64位编译,生成libmylibc.dll和libmylibc.a(导入库)两个文件,放入项目lib目录。
  2. 删除项目中错误的libmylibc.so文件,Windows平台不需要so格式的库。
  3. 沿用上面修正后的.pro配置即可,不需要额外修改。

验证方法

编译完库文件后,可以用MinGW自带的file命令验证文件格式:

  • Android arm架构so:输出包含ELF 32-bit LSB shared object, ARM, EABI5
  • Windows dll:输出包含PE32+ executable (DLL) (console) x86-64, for MS Windows
  • 普通Linux x86 so:输出包含ELF 64-bit LSB shared object, x86-64
    确认格式和目标平台匹配后再放入Qt项目链接。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 02:48:02