当前位置: 首页 > 知识库问答 >
问题:

使用附加库(Assimp)在Qt上构建android应用程序

韩景辉
2023-03-14

嗨,我正在尝试将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.所以仍然卡住。.

共有2个答案

凤经国
2023-03-14

我建议你看看我找到的解决问题的方法(与你的方法非常相似):

利伯达尔。so android错误:无法加载库“libgdal.so.1”

希望这有帮助。

汪弘光
2023-03-14

我用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