【问题标题】:how to compile OpenCV with Fast-Downward如何使用 Fast-Downward 编译 OpenCV
【发布时间】:2017-05-22 00:42:21
【问题描述】:

我正在进行一项学术研究,基于Fast-Downward 实现新的搜索算法,这是一个实现多个Search Algorithms 和许多搜索域和问题的C++ 开源。还安装了Lab,这是一个管理编译和运行脚本的 Python 包。

最近我尝试在其 ML 算法中包含 OpenCV 库,以便将这些算法集成到我的搜索算法中。

但是在我的 FD 项目中包含一些库时,我鼓励了一些问题,并且无法使用 FD 编译 OpenCV。

项目层次结构:

fast_downward
| -- benchmarks
| -- experiments
| -- lab
| -- misc
| -- src
|    | -- preprocess
|    | -- search
|    | -- translate
|    | -- VAL
|    | -- ML

ML目录是我要编译的新子目录。

编译尝试:

src/CMakeLists.txt下:

include(ML/CMakeLists.txt)

add_subdirectory(ML)

但是编译失败了。

老实说,我从未尝试过编辑 CMake 文件,而且我不知道策略和如何去做。

所以,我的问题是如何在我的主项目中集成 OpenCV 包/子文件夹(在我的项目中称为 ML)?

编辑:

Distributor ID: Ubuntu
Description:    Ubuntu 14.04 LTS
Release:        14.04

【问题讨论】:

    标签: python c++ opencv compilation cmake


    【解决方案1】:

    你不应该需要include(ML/CMakeLists.txt)add_subdirectory(ML)src/CMakeLists.txt 里面应该足够了。
    现在,我们一般可以有两种情况:

    1. 您在系统范围内安装了 OpenCV(例如通过 apt-get 等),因此您使用的是系统版本的 OpenCV
    2. 您在项目中包含 OpenCV 的源代码。您构建它并使用此版本的 OpenCV。

    这两种情况需要以稍微不同的方式处理。

    系统范围的 OpenCV 安装

    假设 OpenCV 安装在您系统的某个位置。然后在src/ML/CMakeLists.txt 你应该有如下几行:

    find_package(OpenCV REQUIRED)
    include_directories(${OpenCV_INCLUDE_DIRS})
    add_executable(test ${YOUR_SOURCES} ${YOUR_HEADERS})
    target_link_libraries(test ${OpenCV_LIBS})
    

    这是为了产生一个可执行文件,但如果你想产生一个库,你应该有add_library(...)而不是add_executable(...)。如果您需要来自 OpenCV 的特定组件,您应该通过find_package(OpenCV REQUIRED COMPONENTS core imgproc ...) 索取,当然也可以查阅 OpenCV 文档。请注意,您的 CMake 可能会在没有 FindOpenCV.cmake 脚本的情况下发布,因此您可能无法使用 find_package(OpenCV)。在这种情况下,您需要从网上获取一个。另请参阅其源代码,因为它可能定义了包含包含和库的不同变量,这意味着可能会发生这种情况,而不是使用例如 target_link_libraries(test ${OpenCV_LIBS}) 您应该使用 target_link_libraries(test ${OpenCV_LIBRARIES})

    您下载并包含在包内/外的 OpenCV 源代码

    在这种情况下,我想你的系统的某个目录中有 OpenCV 包/源;请注意,在这种情况下,您需要构建 OpenCV,apt-get 不会为您完成工作。在您的src/ML/CMakeLists.txt 中,您将拥有类似

    ExternalProject_Add(my_opencv
       CMAKE_ARGS -D BUILD_SHARED_LIBS=NO ...
       CMAKE_INSTALL_PREFIX=${MY_OPENCV_INSTALLATION_DIR} 
       SOURCE_DIR ${PATH_TO_OPENCV_SRCS} 
    )
    
    find_package(OpenCV REQUIRED)
    include_directories(${OpenCV_INCLUDE_DIRS})
    add_executable(test ${YOUR_SOURCES} ${YOUR_HEADERS})
    target_link_libraries(test ${OpenCV_LIBS})
    

    值得咨询的来源有:
    OpenCV intro: cmake
    linking opencv libraries included as an external project via cmake
    Configuring an c++ OpenCV project with Cmake
    Could not find module FindOpenCV.cmake ( Error in configuration process)
    CMake and OpenCV 3.0
    sample FindOpenCV.cmake

    【讨论】:

    • 第二部分是我的情况。我有一个项目,里面放了 OpenCV 源代码。因此,据我所知,如果我想编译所有内容并能够从项目中的另一个源文件中调用 OpenCV 的类,我需要做的就是将示例 cmake 代码放入 OpenCV 的 CMakeLists.txt 文件中?当我编译我的整个项目时,我会一起编译吗?
    • 不,第二种情况下 CMakeLists.txt 中的“示例”行不应进入 OpenCV 的 CMakeLists.txt,而应进入您的 CMakeLists.txt。基本上,您在 CMakeLists.txt 中告诉您生成可执行文件或库:“构建 OpenCV(此处的细微之处和不同的情况......),查找 OpenCV,为我的可执行文件或库使用 OpenCV 的头文件和库”。
    猜你喜欢
    • 2015-06-12
    • 2016-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多