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

时间:2016-08-25 10:50:25

标签: c++ visual-studio opencv libraries multiplatform

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

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

我想创建一个基本的c ++类,其中包含一个接受图像并执行一系列opencv相关操作的函数,但是我需要自由地将许多平台的代码编译为本机库(我认为使用.lib或.dll将禁止多个平台的编译)。我想这可能只使用c ++源代码。但是使用visual studio并添加其他包含目录,我确实得到错误LNK2019,这可能是"声明了一个函数或变量但未定义"虽然我确实包含了“正确的”#39; .hpp' s和.cpp的目录但是我可能会错过一些东西。

2 个答案:

答案 0 :(得分:0)

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

在您的项目中包含结果库(静态lib或动态dll文件),就像预编译的那样。这样,库文件将保持独立并仅构建一次,而不是在项目的每个构建中。

在Visual Studio中,您可以为每个配置单独设置包含路径,以便您可以将项目设置为使用为当前体系结构构建的库。

答案 1 :(得分:0)

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

如果您之前构建过OpenCV,那么您应该遇到CMake。同 CMake可以配置external projects(EP),这将是 下载第三方项目的源代码,然后配置,构建, 并安装它。这是从github repository复制的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。