使用 C++ 库的源代码 (opencv)

working with c++ library's source code (opencv)

我想问一下是否可以使用 opencv 库的 c++ 源代码,而不使用 .lib 和 .dll 等编译库。

我的意思是是否可以仅使用库中的头文件和 .cpp 文件?

我想创建一个基本的 c++ class 具有接受图像并执行一系列 opencv 相关操作的功能,但我需要自由地为许多平台编译代码作为本机库(我认为使用 .lib 或 .dll 将禁止为多个平台编译)。我想这可以通过仅使用 c++ 源代码来实现。但是使用 visual studio 并添加其他包含目录时,我确实收到了错误 LNK2019,这可能是 "A function or variable is declared but not defined" 尽管我确实将 'right' 目录包含在 .hpp 和 .cpp 中,但可能我错过了一些东西。

这是本机代码的典型案例。您需要做的是下载源代码(我相信您已经这样做了)并为您需要的平台单独构建它。

在您的项目中包括结果库(静态 lib 或动态 dll 文件),就像预编译的一样。通过这种方式,库文件保持独立并且只构建一次,而不是在项目的每个构建中。

在 Visual Studio 中,您可以为每个配置分别设置包含路径,这样您就可以将项目设置为使用为当前架构构建的库。

添加@slawekwin 在他上面的评论中写的内容,构建和 链接目标平台上的依赖项也可以自动化 构建系统的一部分。

如果你以前构建过 OpenCV,你应该接触过 CMake。和 CMake 可以配置 external projects (EP),这将 下载第三方项目的源代码,然后配置、构建、 并安装它。这是从 github 复制的 OpenCV 示例 存储库

ExternalProject_Add(opencv
  GIT_REPOSITORY ${git_protocol}://code.opencv.org/opencv.git
  GIT_TAG 2.3.1
  SOURCE_DIR opencv
  BINARY_DIR opencv-build
  UPDATE_COMMAND ""
  PATCH_COMMAND ""
  CMAKE_GENERATOR ${gen}
  CMAKE_ARGS
    ${ep_common_args}
    -DBUILD_DOCS:BOOL=OFF
    -DBUILD_EXAMPLES:BOOL=OFF
    -DBUILD_NEW_PYTHON_SUPPORT:BOOL=OFF
    -DBUILD_PACKAGE:BOOL=OFF
    -DBUILD_SHARED_LIBS:BOOL=ON
    -DBUILD_TESTS:BOOL=OFF
#   -DCMAKE_BUILD_TYPE:STRING=Release
    -DWITH_FFMPEG:BOOL=OFF
    -DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_BINARY_DIR}/INSTALL
)

set( OPENCV_ROOT_DIR ${CMAKE_BINARY_DIR}/INSTALL )
set( OPENCV_DIR ${CMAKE_BINARY_DIR}/INSTALL )

看看跨平台包也可能很有趣 C++ 管理器名为 hunter,它基于 CMake EP。