2016-08-25 28 views
0

我想問是否有可能與OpenCV庫的C++源代碼的工作,而無需使用編譯庫一樣的.lib和.dll工作。與C++庫的源代碼(OpenCV的)

我的意思是它可以只從庫的頭文件和.cpp文件?

我想創建一個基本的C++類,它具有接受圖像並執行一系列opencv相關操作的功能,但我需要自由地將許多平臺的代碼編譯爲本地庫(我認爲使用.lib或.dll將禁止編譯多個平臺)。我想只有使用C++源代碼纔有可能。但使用Visual Studio並添加其他包含目錄,我得到錯誤LNK2019,這可能是「一個函數或變量已聲明,但未定義」,雖然我確實包含.hpp和.cpp的'正確'目錄,但可能我錯過了一些東西。

+4

您可以自己下載源代碼併爲您所需的平臺構建庫,然後將它們包括在一起並重建項目 – slawekwin

回答

0

這是本機代碼的典型案例。你需要做的是下載源代碼(我相信你已經做到了),併爲你需要的平臺單獨構建它。

在您的項目中包含結果庫(或者是靜態的lib或動態的dll文件),就像預編譯的結果庫一樣。這種方式庫文件保持分離,只構建一次,而不是每個構建項目。

在Visual Studio中,您可以爲每個配置分別設置包含路徑,以便您可以將項目設置爲使用爲當前體系結構構建的庫。

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。