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

无法让qmake正确完成Android交叉编译求助

求助:qmake+clang生成Android可用二进制文件失败

我是qmake构建系统的新手,已经花了数十小时尝试用qmake+clang生成能在Android上正常工作的二进制文件,恳请大家提供帮助或建议。以下是最简复现示例:

可正常工作的命令行编译方式

直接用clang命令编译生成的共享对象,能通过Unity的C#原生互操作在Android中正常调用:

C:\Users\deltav\AppData\Local\Android\Sdk2\ndk\21.3.6528147\toolchains\llvm\prebuilt\windows-x86_64\bin\clang.exe ^
-target aarch64-none-linux-android21 -shared -v ^
-DANDROID_ABI=arm64-v8a -DANDROID_ARM_MODE=arm -DANDROID ^
M:\simpleExample\simpleExample.c ^
-o M:\simpleExample\libsimpleExample.so

该命令的详细编译输出已保存,此处省略。

无法生成有效文件的qmake配置

我的simpleExample.pro文件内容如下:

TEMPLATE = lib
CONFIG += shared
TARGET = simpleExample
ANDROID_ABI = arm64-v8a
ANDROID_PLATFORM = android-21
SOURCES += simpleExample.c

Release模式下qmake执行输出核心内容如下:

Info: creating stash file M:\simpleExample\.qmake.stash
android-21-arm64-v8a-qmake: Running configuration tests...
android-21-arm64-v8a-qmake: Configuration tests done.
Generating Makefile...

我的qmake工具包配置:使用Android NDK 21.3.6528147,目标ABI为arm64-v8a,编译器选择clang,目标平台为android-21。

具体问题表现

Unity中C#通过以下代码加载共享对象时出错:

[DllImport("simpleExample")]
public static extern float getSpeedY();

错误信息:

"DllNotFoundException: Unable to load DLL 'simpleExample': The specified module could not be found."

注:直接用命令行编译的文件无此问题,已排除Unity或C#层面的问题。

已尝试的调试步骤

  • 使用多款ELF & DWARF工具对比命令行和qmake生成的二进制文件ABI,结果完全一致。
  • 手动调整qmake生成的clang调用命令,最终得到了能正常编译的命令,但无法直接替换qmake,因为还有其他项目需要统一用qmake构建。

QMake版本:3.1
讽刺的是,用CMake可以直接正常生成有效文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 14:20:23