您好我正在尝试将 OpenGL 桌面应用程序移植到 android。我对 android 开发一无所知,所以我依赖 Qt Creator 来打包应用程序。作为设置的一部分,我在 android ndk 中使用以下设置调用了“make-standalone-toolchain”脚本
--platform=android-21
--toolchain=arm-linux-androideabi-4.9
--system=linux-x86_64
然后我使用 android-cmake 并将我新创建的独立工具链的路径传递给它,它在我的 assimp 目录树中创建了 libassimp.so、libassimp.so.3 和 libassimp.so.3.1.1(ln)。
我将 libassimp.so 路径传递给“附加库”下的 Qt 创建者项目构建菜单。但是,在 android 上部署应用程序时,它会崩溃并出现错误:
dlopen("/data/app/org.qtproject.example.a3dqtquick-2/lib/arm/lib3dqtquick.so", RTLD_LAZY) failed: dlopen failed: could not load library "libassimp.so.3" needed by "lib3dqtquick.so"; caused by library "libassimp.so.3" not found
我什至可以在 ../android-build/libs/armeabi-v7a 的项目构建目录中看到 libassimp.so(不是 libassimp.so.3)文件。
不知道从哪里开始,手动将 libassimp.so.3 放在这个位置并不能解决问题。谢谢阅读。我将在您的反馈中添加更多信息。请原谅任何信息不足,因为这是我第一次使用 android 进行实验。
以下是 deployment-settings.json 文件
"description": "This file is generated by qmake to be read by androiddeployqt and should not be modified by hand.",
"qt": "/home/ubashir/programs/Qt/5.4/android_armv7",
"sdk": "/home/ubashir/programs/android-sdk-linux",
"sdkBuildToolsRevision": "21.1.2",
"ndk": "/home/ubashir/programs/android-ndk-r10d",
"toolchain-prefix": "arm-linux-androideabi",
"tool-prefix": "arm-linux-androideabi",
"toolchain-version": "4.9",
"ndk-host": "linux-x86_64",
"target-architecture": "armeabi-v7a",
"qml-root-path": "/home/ubashir/code/3dqtquick",
"application-binary": "/home/ubashir/code/3dqtquickAndroid/lib3dqtquick.so"
更新:
我现在已经尝试过这个.. 用后者的副本替换所有指向 assimp.so.3.1.1 的链接,所以现在我的库 libassimp.so.3 是一个文件,而不是指向 libassimp.so.3.1.1 的链接。我手动将 libassimp.so.3 添加到我的项目子文件夹 android/libs/aremabi-v71 --- 不好。我确认我的构建目录显示了所有 libassimp 文件,因为我手动添加了它们,因此推测它们正在被部署,但错误仍然存在:
failed: dlopen failed: could not load library "libassimp.so.3" needed by "lib3dqtquick.so".
我什至在我的 android 的 assimp 构建目录上运行 cmake 后编辑了 link.txt 文件,用 -soname,libassimp.so 更改条目 -soname,libassimp.so.3 但它仍然使用它的创建 libassimp.so.3.1.1两个链接,即 libassimp.so.3 和 libassimp.so。所以还是卡住了。。