【问题标题】:OpenCV Android native code build issueOpenCV Android 本机代码构建问题
【发布时间】:2018-06-13 18:22:52
【问题描述】:

我正在学习如何使用 OpenCV 编写 C++ 代码,我想在 Android 中运行它。我使用安卓工作室。

我创建了一个支持 C++ 的新简单项目,然后我将测试代码添加到 C++ 文件中。我自己的文件编译和链接,似乎。

现在我认为与我的项目无关的其他事情导致了许多错误。它似乎是 NDK 内部的东西。会不会是最新版本的bug,如果是,我该怎么办?

  C:/Android/sdk/ndk-bundle/toolchains/x86-4.9/prebuilt/windows-x86_64/lib/gcc/i686-linux-android/4.9.x/../../../../i686-linux-android/bin\ld: error: C:/Android/OpenCV-android-sdk/sdk/native/3rdparty/libs/x86/libippicv.a(jmp_icvippiCopyConstBorder_8u_C4IR_L_as.s.o): relocation R_386_GOTOFF against preemptible symbol icv_ippJumpIndexForMergedLibs cannot be used when making a shared object
  C:/Android/sdk/ndk-bundle/toolchains/x86-4.9/prebuilt/windows-x86_64/lib/gcc/i686-linux-android/4.9.x/../../../../i686-linux-android/bin\ld: error: C:/Android/OpenCV-android-sdk/sdk/native/3rdparty/libs/x86/libippicv.a(jmp_icvippiConvert_32s16u_C1RSfs_as.s.o): relocation R_386_GOTOFF against preemptible symbol icv_ippJumpIndexForMergedLibs cannot be used when making a shared object
  C:/Android/sdk/ndk-bundle/toolchains/x86-4.9/prebuilt/windows-x86_64/lib/gcc/i686-linux-android/4.9.x/../../../../i686-linux-android/bin\ld: error: C:/Android/OpenCV-android-sdk/sdk/native/3rdparty/libs/x86/libippicv.a(jmp_icvippiNormRel_L1_32f_C1R_as.s.o): relocation R_386_GOTOFF against preemptible symbol icv_ippJumpIndexForMergedLibs cannot be used when making a shared object
  C:/Android/sdk/ndk-bundle/toolchains/x86-4.9/prebuilt/windows-x86_64/lib/gcc/i686-linux-android/4.9.x/../../../../i686-linux-android/bin\ld: error: C:/Android/OpenCV-android-sdk/sdk/native/3rdparty/libs/x86/libippicv.a(jmp_icvippiFilterBilateralBorderInit_L_as.s.o): relocation R_386_GOTOFF against preemptible symbol icv_ippJumpIndexForMergedLibs cannot be used when making a shared object
  C:/Android/sdk/ndk-bundle/toolchains/x86-4.9/prebuilt/windows-x86_64/lib/gcc/i686-linux-android/4.9.x/../../../../i686-linux-android/bin\ld: error: C:/Android/OpenCV-android-sdk/sdk/native/3rdparty/libs/x86/libippicv.a(jmp_icvippiScaleC_32f8u_C1R_as.s.o): relocation R_386_GOTOFF against preemptible symbol icv_ippJumpIndexForMergedLibs cannot be used when making a shared object

【问题讨论】:

标签: android-studio opencv android-ndk android-studio-3.0 opencv4android


【解决方案1】:

除了从 NDK16 降级到 NDK14 之外,您仍然可以通过在 CMakeLists.txt 之前的 add_library() 之前添加以下内容来使用 NDK16:

set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--exclude-libs,libippicv.a -Wl,--exclude-libs,libippiw.a")

复制自this关于 github 问题的讨论

【讨论】:

    【解决方案2】:

    我恢复到 NDK 14.1.3816874,而不是使用当前最新的 NDK 16.1.4479499,错误已经消失。

    您可以在此处找到较旧的 NDK:https://developer.android.com/ndk/downloads/older_releases.html

    我希望这会有所帮助!

    【讨论】:

    • 这可能是因为 NDK r16 中的默认值已更改。为了保持与预建 OpenCV 库的兼容性,您需要明确选择 gnustl 和 gcc。
    猜你喜欢
    • 2015-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-23
    • 1970-01-01
    • 2016-11-07
    • 2023-03-26
    • 1970-01-01
    相关资源
    最近更新 更多