嗨,我正在尝试将OpenGL桌面应用程序移植到android。我对android开发一无所知,所以我依赖Qt Creator来打包应用程序。作为设置的一部分,我在android ndk中使用以下设置调用了“生成独立工具链”脚本
--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考试。因此,Qt creator项目构建菜单的路径位于“附加库”下。然而,在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
我甚至可以看到libassimp。项目生成目录中的so(而不是libassimp.so.3)文件位于/android build/libs/armeabi-v7a。
不确定从这里去哪里,手动在这个位置放置libassimp.so.3并不能解决问题。感谢您的阅读。我会在你的反馈中添加更多的信息。请原谅任何信息不足,因为这是我第一次用Android做实验。
以下是部署设置。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的链接。所以3.1.1有了后者的副本,现在我的图书馆libassimp。所以3是一个文件,而不是指向libassimp的链接。所以3.1.1. 我手动添加了libassimp。所以3到我的项目子文件夹android/libs/aremabi-v71--不好。我确认,在我手动添加libassimp文件时,我的构建目录显示了所有libassimp文件,因此推测它们正在部署,但错误仍然存在:
failed: dlopen failed: could not load library "libassimp.so.3" needed by "lib3dqtquick.so".
正如这里概述的http://webmail.dev411.com/p/gg/android-ndk/1386vger6e/use-assimp-c-library-in-ndk-ld-error-obj-local-armeabi-v7a-libassimp-so-incompatible-target-for-use-with-vuforia
我甚至在android的assimp构建目录上运行cmake后编辑了link.txt文件,更改了条目-soname,libassimp.so.3和-soname,libassimp.so但它仍然创建了libassimp.so.3.1.1及其两个链接,即libassimp.so.3和libassimp.so.所以仍然卡住。.
我建议你看看我找到的解决问题的方法(与你的方法非常相似):
利伯达尔。so android错误:无法加载库“libgdal.so.1”
希望这有帮助。
我用CMake for和Android项目构建的共享库也遇到了同样的问题。我找到了解决办法。如果你更熟悉CMake,可能会有更干净的解决方案。
在CMakeLists.txt文件中搜索SOVERSION和SET_TARGET_PROPERTIES()
在SET_TARGET_PROPERTIES()例程中,注释出VERSION和SOVERSION的行,如下所示
SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES # create *nix style library versions + symbolic links
DEFINE_SYMBOL DSO_EXPORTS
# VERSION ${PROJECT_VERSION}
# SOVERSION ${PROJECT_SOVERSION}
CLEAN_DIRECT_OUTPUT 1 # allow creating static and shared libs without conflicts
OUTPUT_NAME "${PROJECT_NAME}${PROJECT_DLLVERSION}" # avoid conflicts between library and binary target names
)
然后重新运行CMake中的配置和生成步骤,并重建目标。这应该给你一个机会。所以没有任何版本号。
利用一套工具,Qt 开发人员可以简化在所有支持平台中构建应用程序的流程。描述应 用程序、库和插件的项目文件被用来为每个平台生成适当的 makefile。 .pro 文件描述了各个项目,该文件以文本方式概述了源文件、头文件、 Qt Designer 窗体以及其他资源。这些资源都是由 qmake 工具来处理的,以便为每个平台中的项目生成 适当的 Makefile。 项目文件可描述 Qt 的所有库、工具
问题内容: 很长时间以来,我一直在从事与离子相关的项目。 最近,我更新了android studio及其软件包,由于以下问题,我现在无法在android上进行构建: com.android.build.api.transform.TransformException:java.util.zip.ZipException:重复条目:com / google / android / gms / iid
问题内容: 我正在尝试使用我的go应用程序创建一个docker映像。该应用程序(在MacOS上开发)取决于哪个,而又取决于我在Docker映像中安装的对象,如下所示: 我收到以下错误: 我/app/folder/vendor/github.com/confluentinc/confluent-kafka-go/kafka ../folder/vendor/github.com/confluenti
失败,“gcr.io/cloud-builders/docker”失败:退出状态139
在gradle attemp构建项目后有一个日志(使用Pro buf) :app:GeneratedBugProto失败 失败:生成失败,出现异常。 > 错误:任务“:app:generateDebugProto”的执行失败。 协议:标准输出:。stderr:/Users//app/build/extracted protos/main:警告:目录不存在/用户//app/src/debug/pro
我想知道这种情况下的最佳实践是什么: 我正在模拟一个电梯系统,该系统目前正在将所有输出转储到控制台。这不容易追踪,而且很难想象每层楼的问题状态以及当前算法的效率。设置如下: 一对人-生产者/消费者创建随机的人,并将他们放置在每个楼层的特定目的地。每一层都有供人们上下活动的问讯处。电梯与每层楼和一个调度器交互,以决定下一步去哪里以及接谁。 将此设置表示为gui时,将每个线程/对象的当前状态转换为gu