android - 将 OpenBR 编译为 ArmV7 - Android 工具链问题

标签 android c++ qt android-ndk cmake

我已经成功完成了 install/build instructions for OpenBR on linux

我的目标是在 android 上构建和运行 OpenBR。

经过大量的修改,我终于成功地为 armv7 构建了 OpenBR。我的问题是,当我执行“System.loadLibrary("openbr")"时出现错误:

11-25 23:40:31.221: E/dalvikvm(29742): dlopen("/data/app-lib/com.test.app-28/libopenbr.so") failed: dlopen failed: could not load library "/home/ubuntu/qt5.1.1/android_armv7/lib/libQt5Concurrent.so.5.1.1" needed by "libopenbr.so"; caused by library "/home/ubuntu/qt5.1.1/android_armv7/lib/libQt5Concurrent.so.5.1.1" not found

我相信我已经正确地包含了 armv7 libQt5Concurrent 库(在 android.mk 中加载为本地模块),但我认为问题是 libopenbr 在加载时查找了错误的目录(如错误消息中所示) .它试图在编译机器上查找路径。

在 libopenbr.so 上运行 readelf 会产生以下结果:

 0x00000001 (NEEDED)                     Shared library: [/home/ubuntu/qt5.1.1/android_armv7/lib/libQt5Concurrent.so.5.1.1]
 0x00000001 (NEEDED)                     Shared library: [/home/ubuntu/qt5.1.1/android_armv7/lib/libQt5Core.so.5.1.1]
 0x00000001 (NEEDED)                     Shared library: [/home/ubuntu/qt5.1.1/android_armv7/lib/libQt5Gui.so.5.1.1]
 0x00000001 (NEEDED)                     Shared library: [/home/ubuntu/qt5.1.1/android_armv7/lib/libQt5Network.so.5.1.1]
 0x00000001 (NEEDED)                     Shared library: [/home/ubuntu/qt5.1.1/android_armv7/lib/libQt5Sql.so.5.1.1]
 0x00000001 (NEEDED)                     Shared library: [/home/ubuntu/qt5.1.1/android_armv7/lib/libQt5Widgets.so.5.1.1]
 0x00000001 (NEEDED)                     Shared library: [/home/ubuntu/qt5.1.1/android_armv7/lib/libQt5Xml.so.5.1.1]
 0x00000001 (NEEDED)                     Shared library: [libz.so]
 0x00000001 (NEEDED)                     Shared library: [libdl.so]
 0x00000001 (NEEDED)                     Shared library: [libm.so]
 0x00000001 (NEEDED)                     Shared library: [liblog.so]
 0x00000001 (NEEDED)                     Shared library: [libc.so]

如何获取它,以便在编译时不使用此路径搜索 Qt 库?

我尝试了各种 cmake 指令,包括 openbr CMakeLists.txt 中这些变量的各种排列:

SET(CMAKE_SKIP_RPATH TRUE)

# use, i.e. don't skip the full RPATH for the build tree
SET(CMAKE_SKIP_BUILD_RPATH  TRUE)

# when building, don't use the install RPATH already
# (but later on when installing)
SET(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)

# the RPATH to be used when installing
SET(CMAKE_INSTALL_RPATH "")

# don't add the automatically determined parts of the RPATH
# which point to directories outside the build tree to the install RPATH
SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH FALSE)

如果能帮助我将此路径从我构建的库的共享库路径中移出,那就太好了!谢谢!

最佳答案

实际上我终于想出了如何通过更新每个 qt lib 的 cmake 文件来解决这个问题,使其不在文件名末尾包含版本字符串!

关于android - 将 OpenBR 编译为 ArmV7 - Android 工具链问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27148696/

相关文章:

android - 添加多个回收 View 时,不可转换类型无法将 dataobjectholder 转换为 groupview 持有者

java - 如何使用 play-services-* 依赖项显示电话号码和电子邮件选择器对话框?

c++ - PostMessage 能否使工作线程中的变量更改在 GetMessage 之后在 UI 线程中可见?

c++ - QStackedLayout 隐式显示添加的小部件

Android 在特定设备上崩溃 - 由 int64 分配引起

android - 为 Android 上的 HTML 聊天程序保持键盘打开?

c++ - 这两个版本的代码有什么区别?

c++ - 使用模板、方法指针和字符串进行类型推导

qt - 为什么我的线宽在具有相同 QPen 宽度的 QGraphicsScene 中看起来不同?

RStudio 不显示任何 Pane