【问题标题】:opencv2/opencv.hpp file not found in Xcode在 Xcode 中找不到 opencv2/opencv.hpp 文件
【发布时间】:2016-03-29 13:11:21
【问题描述】:

我已经构建了 openCV 来获取 opencv2.framework。我通过转到“构建阶段->将二进制文件与库链接”将其添加到我的 xcode iOS 项目中,然后尝试在我的项目中包含“opencv2/opencv.hpp”。 我收到错误“opencv2/opencv.hpp”未找到。但是该文件存在于框架中。我试图在网上找到解决方案,但对我没有任何帮助。

我试图将它包含在其中的文件是一个 .mm 文件。我已经将“源代码编译为”objective-c++。任何帮助都会很棒。

【问题讨论】:

  • 尝试添加包含“opencv.hpp”。它的工作原理?
  • 不。未找到“opencv.hpp”文件
  • 有时我们将框架拖放到应用程序中,这可能会导致一些问题,所以做一件事。首先从您的项目中删除 opencv2.framework。现在右键单击项目->单击将文件添加到项目->选择opencv2.framework。
  • @AnirudhGP 是如何构建 opencv 框架的?我一直从他们的网站下载它,然后将下载拖放到我的项目中。对吗?
  • 截至 2016 年 3 月(Obj-C),只需从 opencv.org/downloads.html 下载框架,然后您可能需要使用以下内容更改 .pch 文件。 #ifdef __cplusplus //#import #include #endif _______________

标签: ios xcode opencv


【解决方案1】:

对我有用的方法非常简单:

*注意 IOS 与 OS X 项目的区别

对于 IOS:

将 opencv 下载(对于 3.0.0,它只是一种拖放式的东西)放入项目特定的 Xcode 文件夹中。然后将 Frame Search Paths 设置为 $(PROJECT_DIR)。框架搜索路径位于 Build Settings 下。无需设置其他路径。

最后,右键单击导航窗格并单击“将文件添加到...”,以便从项目文件夹中添加 opencv 库。

对于 OSX:

查看 Tim 的教程:https://www.youtube.com/watch?v=OVSPfUmNyOw

【讨论】:

  • 这在 XCode 7 和 OpenCV 3.1.1(奇怪的是作为“opencv2”)中完美运行。起初,当我更改它时,它以 $(inherited) $(PROJECT_DIR) 的形式出现,所以我编辑了 $(inherited) 部分,以便我的“框架搜索路径”与您所说的相匹配。所有奇怪的错误都消失了。
  • 跟进:错误又回来了。所以这对我不起作用。
  • 无论我做什么,我都会遇到同样的错误。绝对路径,$(PROJECT_DIR) 或其他。有人有解决方案吗?
【解决方案2】:

我通过将绝对路径添加到 FRAMEWORK_SEARCH_PATHS 来解决问题,如果我有我需要使用的框架:

显然,您应该使用自己的路径。 ;-)

【讨论】:

    【解决方案3】:

    我花了 4 个小时才弄明白。这就是我让它工作的方式: 除了 opencv 框架,在构建阶段添加以下框架:

    Accelerate、AssetsLibrary、AVFoundation , 核心图形 , 核心图像 , 芯传媒 , 核心视频 , 石英芯 , 界面套件 , 基金会。

    然后,在 .pch 文件中,在 UIKit 和 Foundation 导入之前添加这些行:

    #ifdef __cplusplus
    #import <opencv2/opencv.hpp>
    #endif
    

    【讨论】:

    • 我试过了,但现在我得到了同样的错误,现在当我删除导入 openCV 的调用时,我得到了这个错误clang: error: linker command failed with exit code 1 (use -v to see invocation) 你是通过转到 new-> 来创建 .pch 文件吗?文件->.pch 文件?
    • opencv框架是怎么搭建的?我一直在从他们的网站下载它,然后将下载内容拖放到我的项目中。对吗?
    • 是的,您只需将“.framework”文件拖放到您的 xcode 项目中。是的,我正在通过转到 new->file->.pch 文件来创建 .pch 文件。创建此文件后,转到构建设置并搜索“前缀标头”。将预编译前缀头设置为 YES,并在下一个字段中添加 .pch 文件的名称。为方便起见,在 Supporting Files 文件夹中创建 .pch 文件。
    • 还要确保您也添加了提到的其他框架。否则会出现链接器错误。
    • 我最终不得不使用:#ifdef __cplusplus //#import #include #endif
    【解决方案4】:

    在我的例子中,头文件的符号链接被破坏了。这是由克隆以下优秀示例项目引起的:

    https://github.com/BloodAxe/OpenCV-Tutorial

    在克隆的项目中,头文件不再可访问。从官方 opencv ios 下载站点 (OpenCV for iOS) 重新导入 opencv2.framework 后,标题再次可用。 XCode 应如下所示:

    以下是带有损坏标头的 Xcode 项目的屏幕截图。 使用损坏的头文件,xcode 项目如下所示:

    【讨论】:

      【解决方案5】:

      确保在目标的 Build Settings 中,您将 Search Paths 部分中的 Framework Search Path 设置为框架所在位置的正确路径目录。您可以通过在空白处单击Framework Search Path 右侧,单击+ 号并添加$(PROJECT_DIR) 然后再次单击+ 并添加$(inherited) 来执行此操作。确保框架位于手头项目的主目录中。这对我有用,因为我遇到了同样的问题。

      希望这会有所帮助!

      【讨论】:

        【解决方案6】:

        我在我的项目中使用了 openCV,并且使用 cocoapods 实现它是不可能的,因为库的版本太旧了,所以我决定将它实现为静态库。在您的项目中创建文件夹并在那里添加库,在构建设置中找到 libraryframework 搜索路径并将链接添加到您的 openCV 文件夹。它将正常工作而不会出现任何错误。您还应该在prefixPatch 中添加openCV 头文件。

        更详细的说明 100% 有效:

        1) 从官网下载框架:OpenCV

        2) 在 Project Directory 中创建文件夹名为:External_SDK

        3) 将 Opencv 框架放在此文件夹中,然后将其拖放到 Xcode 项目(文件夹)中,目标成员为您的应用程序(不是 App_test)。

        4) 在 Xcode Project 中搜索 yourPrefixHeaderFileName.pch 并在文件顶部添加以下行:

        #ifdef __cplusplus
        #import <opencv2/opencv.hpp>
        #endif
        

        5) 之后你应该在 .h 文件中importinclude 它,为什么要包含?因为它是 CPP 库。如果您想使用 import 关键字访问库,那么您应该这样做:#import &lt;EXAMPLE&gt;

        6) 在构建设置中搜索 libraryframework 搜索路径并将链接添加到您的 EXTERNAL_SDK 文件夹。直接从您的文件夹中读取框架。查找并更改 ALWAYS_SEARCH_USER_PATHS = YES 并在 HEADER_SEARCH_PATHS 添加 $(inherited) 和 /usr/include/FRAMEWORK_PATH

        希望这个答案对某人有所帮助。

        最好的做法是调用

        #include <opencv2/highgui/highgui.hpp>
        #include <opencv2/core/core.hpp>
        

        只有头文件。

        【讨论】:

        • 您能否更详细地解释一下如何执行此操作? @anirudh GP 并不是唯一面临这个问题的人
        • 我照你说的做了。我现在在 .pch 文件中遇到同样的错误。 “opencv2/opencv.hpp”文件未找到。
        • 在这种情况下,使用 /usr/include/OpenCV_PATH 更改您的 Header 搜索路径
        • 我需要先安装openCV吗?我刚刚创建了框架并且正在使用它,所以我在 /usr/include 中没有任何 openCV 文件。
        • 我试过了,但现在我得到了同样的错误,现在当我删除导入 openCV 的调用时,我得到了这个错误clang: error: linker command failed with exit code 1 (use -v to see invocation) 你是通过转到 new-> 来创建 .pch 文件吗?文件->.pch 文件?
        【解决方案7】:

        根据我的经验,没有必要添加这么多其他框架。相反,只需要 opencv2 并在 prefixheader.pch 中添加“#import”

        问题是必须如上所述设置正确的框架搜索路径,除非 opencv2 框架文件夹在您的项目目录中。

        注意:不要在框架搜索路径中设置错误的位置,因为有两个“YourProjectName”。设置第一个(属于 TARGETS),而不是第二个(属于 PROJECT)。我错了。

        【讨论】:

          【解决方案8】:

          这是我的答案。

          1. 环境:XCode 8.1

          2. 下载页面:http://opencv.org/downloads.html。选择适用于 iOS 的任何链接。

          3. 重要步骤:下载opencv2.framework时,必须使用“.zip”格式,而不是“.framework”格式,然后解压到opencv2.framework。这很奇怪,但它应该工作。同时,如果解压缩的不是,则必须将其重命名为 opencv2.framework。

          4. 只需将框架拖放到您的 iOS 项目中即可。无需任何设置。你可以参考这个进行测试:www.youtube.com/watch?v=ywUBHqxwM5Q。

          【讨论】:

            【解决方案9】:

            当我转到 Target-->Build Phases-->Link Binary With Libraries 时遇到了一些问题。当我从那里添加 opencv2.framework 时,我的应用程序无法启动。

            相反,我只是将框架拖放到 XCode 中的“框架”目录下,这样就可以了。我没有改变其他任何东西。

            【讨论】:

              猜你喜欢
              • 2018-09-29
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2017-08-15
              • 1970-01-01
              • 1970-01-01
              • 2019-11-20
              • 2020-04-14
              相关资源
              最近更新 更多