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

