簡體   English   中英

如何更正 CMAKE 錯誤:找不到包“opencv”

[英]How to correct CMAKE error: package 'opencv' not found

好的,我知道之前已經討論過opencv鏈接,但是我看不到錯誤並且我不明白糾正措施。 我正在嘗試鏈接需要 opencv 的 DBoW2 庫。 我收到未定義的參考錯誤。

$ mingw32-make
Linking CXX shared library ..\lib\libDBoW2.dll
CMakeFiles\DBoW2.dir/objects.a(FORB.cpp.obj):FORB.cpp:(.text+0x124): undefined reference to `cv::Mat::zeros(int, int, int)'
CMakeFiles\DBoW2.dir/objects.a(FORB.cpp.obj):FORB.cpp:(.text+0x1db): undefined reference to `cv::fastFree(void*)'
CMakeFiles\DBoW2.dir/objects.a(FORB.cpp.obj):FORB.cpp:(.text+0x394): undefined reference to `cv::Mat::deallocate()'
CMakeFiles\DBoW2.dir/objects.a(FORB.cpp.obj):FORB.cpp:(.text+0x46a): undefined reference to `cv::Mat::copyTo(cv::_OutputArray const&) const'
CMakeFiles\DBoW2.dir/objects.a(FORB.cpp.obj):FORB.cpp:(.text+0x503): undefined reference to `cv::Mat::copySize(cv::Mat const&)'
CMakeFiles\DBoW2.dir/objects.a(FORB.cpp.obj):FORB.cpp:(.text+0x93f): undefined reference to `cv::Mat::create(int, int const*, int)'
collect2.exe: error: ld returned 1 exit status

這是 CMakeLists.txt 文件

cmake_minimum_required(VERSION 2.8)
project(DBoW2)

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}  -Wall  -O3 -march=native ")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall  -O3 -march=native")

set(HDRS_DBOW2
  DBoW2/BowVector.h
  DBoW2/FORB.h 
  DBoW2/FClass.h       
  DBoW2/FeatureVector.h
  DBoW2/ScoringObject.h   
  DBoW2/TemplatedVocabulary.h)
set(SRCS_DBOW2
  DBoW2/BowVector.cpp
  DBoW2/FORB.cpp      
  DBoW2/FeatureVector.cpp
  DBoW2/ScoringObject.cpp)

set(HDRS_DUTILS
  DUtils/Random.h
  DUtils/Timestamp.h)
set(SRCS_DUTILS
  DUtils/Random.cpp
  DUtils/Timestamp.cpp)

find_package(OpenCV REQUIRED)

set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)

include_directories(${OpenCV_INCLUDE_DIRS})
add_library(DBoW2 SHARED ${SRCS_DBOW2} ${SRCS_DUTILS})
target_link_libraries(DBoW2 ${OpenCV_LIBS})

我使用的是gui界面,參數OpenCV_DIR自動設置為C:/OpenCV/minwg_64。 在該目錄下有一個目錄 lib 包含庫文件,如“libopencv_videostab300.dll.a”

CMakeCache.txt 文件包含以下行

//Dependencies for the target
DBoW2_LIB_DEPENDS:STATIC=general;opencv_videostab;general;opencv_videoio;general;opencv_video;general;opencv_superres;general;opencv_stitching;general;opencv_shape;general;opencv_photo;general;opencv_objdetect;general;opencv_ml;general;opencv_imgproc;general;opencv_imgcodecs;general;opencv_highgui;general;opencv_hal;general;opencv_flann;general;opencv_features2d;general;opencv_core;general;opencv_calib3d;

根據我的閱讀,以下幾行應該足夠了,但我收到了鏈接器錯誤。

find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})
target_link_libraries(DBoW2 ${OpenCV_LIBS})

編輯1:

回應克里斯·梅斯

添加了 pkg 檢查

pkg_check_modules (OPENCV REQUIRED opencv)

現在配置導致錯誤,這是進步,但我仍然不知所措。 我一定在 opencv 安裝/構建中有錯誤。 我確實在外部驅動器上有第二個副本,它是最近(並且很容易)使用 cmake 之類的東西構建的。 但是將 OpenCV_DIR 設置為外部構建會產生相同的錯誤。

Found PkgConfig: C:/msys64/usr/bin/pkg-config.exe (found version "0.28") 
checking for module 'opencv'
  package 'opencv' not found

編輯2:

以下是我啟動新緩存並按兩次生成時 CMake 自動生成的設置(第一次只生成 make,sh)。

CMAKE_BUILD_TYPE (BLANK)
CMAKE_GNUtoMS (UNCHECKED)
CMAKE_INSTALL_PREFIX C:/Program Files (x86)/DBoW2
CMAKE_MAKE_PROGRAM C:/msys64/mingw64/bin/mingw32-make.exe
CMAKE_SH C:/msys64/usr/bin/sh.exe
OpenCV_DIR C:/OpenCV/minwg_64

目錄 C:/OpenCV/minwg_64 包含從 mingw gcc 64 構建的 opencv 庫,以及包括 OpenCVConfig.cmake 和目錄 bin 和 lib 的 cmake 文件。 我想知道我是否需要目錄staticlib?

對於windows環境,我有

OPENCV_DIR = C:\OpenCV\minwg_64  (where built bin and lib are located)
OPENCV_VER = 300
PATH includes C:\OpenCV\minwg_64\bin

linux 上,我將 pkg_check_modules 插件用於 cmake:

find_package( OpenCV REQUIRED )
find_package( PkgConfig REQUIRED )
pkg_check_modules (OPENCV REQUIRED opencv)
include_directories(/usr/include/opencv2)

target_link_libraries(DBoW2 ${OPENCV_LDFLAGS})

注意:我不記得我為什么使用硬編碼/usr/include/opencv2 ,但我想當我嘗試時 OPENCV_INCLUDE_DIRS 沒有任何好處。 可能有更干凈的方法:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM