使用 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。
我想问一下是否可以使用 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。