【问题标题】:OpenCV for Android via Visual Studio to UnityOpenCV for Android 通过 Visual Studio 到 Unity
【发布时间】:2021-08-18 23:47:18
【问题描述】:

我尝试使用 Visual Studio 2019 和 OpenCV Android 编译一个 .so 库,以便在 Unity 中使用该库。 关于如何配置 Visual Studio 以使用 OpenCV Android(herehere)有一些答案,但这些都不适合我。下面你可以看到我的配置。

Visual Studio 2019(在 Windows 10 上运行)

android-ndk-r21e // 也试过 android-ndk-r15c android-ndk-r16b 和 android-ndk-r17c

OpenCV Android 4.5.2 // 也尝试使用 OpenCV Android 4.0.0、4.0.1 和 4.1.0

我在 Visual Studio 2019 中的设置如下所示:

配置属性

- 一般

  • 平台工具集Clang 5.0(也尝试过 Clang 3.8 或 GCC 4.9)

  • 配置类型动态库(.so)

  • 目标 API 级别 Nougat 7.0 (android-24)(也尝试了不同的版本)

  • 使用 STL LLVM libc++ 静态库 (c++_static)(也试过“GNU STL 静态库 (gnustl_static)”)

C/C++

- 一般

  • 其他包含目录“OpenCV_4_5_2_Android\sdk\native\jni\include 的路径”

  • 代码生成启用 C++ 异常“Yes(-fexceptions)”

  • 语言C++17(-std=c++1z)

  • 预编译头文件不使用预编译头文件

链接器

- 一般

  • 其他库目录OpenCV_4_5_2_Android\sdk\native\libs\armeabi-v7a 的路径

- 输入

  • 其他依赖项OpenCV_4_5_2_Android\sdk\native\libs\armeabi-v7a\libopencv_java4.so 的路径

我尝试编译的我的 Source.cpp 只是一个用于测试目的的函数

#include <opencv2/core.hpp>
extern "C" float test(float a, float b)
{float c = a * b;   return c;}

这给了我以下错误:

E0035 #error 指令:此构造函数尚未移植到此平台
E0020 标识符“__fp16”未定义
使用未声明的标识符“ANDROID_LOG_INFO”

当我在引发此错误的文件顶部添加#include "android/log.h" 时,可以修复ANDROID_LOG_INFO 错误。但是其他两个错误仍然存​​在。

【问题讨论】:

    标签: android c++ opencv visual-studio-2019 opencv4android


    【解决方案1】:

    在完全相同的设置下,我遇到了与您完全相同的问题(尽管我使用的是 c++ 11),并且苦苦挣扎了好几天。我相信您(像我一样)看到的错误来自 arm_neon.h。非常奇怪的是,我能够成功地构建(而不是运行).so,即使有这些错误(我说“错误”是因为如果你查看 arm_neon.h,其他人会弹出),所以试试吧。也许这是某种 IntelliJ/Intellisense 错误,而不是其他任何工具链设置中的误报。

    同时,我不能 100% 确定我总是能够解决这个问题,所以如果你不能,也试试这些步骤:

    1. 使用带有 Android NDK 16rb 的 OpenCV 4.0.1。在 OpenCV 构建方面,NDK 很重要,这是我所知道的唯一假设的匹配项。
    2. 从头开始学习本教程:https://amin-ahmadi.com/2019/06/03/how-to-use-opencv-in-unity-for-android/
    3. 如果下载的 OpenCV android SDK 仍然出现问题,请使用他的其他教程从源代码构建 OpenCV:https://amin-ahmadi.com/2019/02/03/how-to-build-opencv-4-x-for-native-android-development/ 然后重复第 2 步。

    主要编辑: OpenCV 4.5.2 需要区别对待,因为它不再使用带有 gnu c++ 的工具链。 - 从 CMake 构建 OpenCV 时,使用 Android NDK 21e 构建,不要使用 OpenCV 4.5.2 中的工具链。使用 Android NDK 的构建文件夹 (android-ndk-r21e\build\cmake) 中的那个。 - 从 Visual Studio 2019 构建 .so 时,不要使用 GNU STL,使用 LLVM。 GNU c++ 不再是 Android NDK 的一部分,您需要将其完全排除在进程之外。 - 在链接器输入中,将您的库文件(或文件,如果它只是世界一个)的名称放在库依赖项字段中,而不是附加依赖项字段中。 - 其他一切都与那些常见教程中的相同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-16
      • 1970-01-01
      • 2018-05-04
      相关资源
      最近更新 更多