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