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

时间:2015-01-24 13:52:20

标签: android qt android-ndk cmake assimp

您好我正在尝试将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

我甚至可以在项目构建目录中看到libassimp.so(不是libassimp.so.3)文件 ../机器人建造/库/ armeabi-V7A。

不确定从何处开始,在此位置手动放置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".

如此处所述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修改了条目-soname,libassimp.so.3,但它仍然创建了libassimp.so.3.1。 1有两个链接,即libassimp.so.3和libassimp.so。所以仍然坚持..

2 个答案:

答案 0 :(得分:0)

我遇到了与使用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中生成步骤并重建目标。这应该给你一个没有任何版本号的.so。

答案 1 :(得分:-1)

我建议你看看我发现的问题解决方案(与你的问题非常相似):

libgdal.so android error: could not load library "libgdal.so.1"

希望这有帮助。