我在 main.cpp
中有一个非常简单的程序,它使用 openCV 显示图像。
我使用以下命令编译它:
g++ -o main main.cpp $(pkg-config opencv4 --cflags --libs)
此问题的附录中提供了 pkg-config opencv4 --cflags --libs
的输出。
然后程序完美运行,我可以在新窗口中看到我的 .jpg
文件。
我决定按照示例 provided by openCV 使用 cmake
编译它.我的程序 (main.cpp
) 本质上是一样的。
所以我的 CMakeLists.txt 文件是:
cmake_minimum_required(VERSION 3.1)
project( main )
find_package( OpenCV REQUIRED )
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -Wextra -pthread")
include_directories( ${OpenCV_INCLUDE_DIRS} )
add_executable( main main.cpp )
target_link_libraries( main ${OpenCV_LIBS} )
我使用以下方法构建我的项目:
mkdir build
cd build
cmake ../
make
然后启动程序,令我惊讶的是它失败并出现以下错误:
terminate called after throwing an instance of 'cv::Exception'
what(): OpenCV(4.5.5-dev) ${ROOT_DIR_OF_MY_PROJECT}/opencv-4.x/modules/highgui/src/window.cpp:1251: error: (-2:Unspecified error) The function is not implemented.
Rebuild the library with Windows, GTK+ 2.x or Cocoa support.
If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config,
then re-run cmake or configure script in function 'cvNamedWindow'
其中 ROOT_DIR_OF_MY_PROJECT
是我的 main.cpp
所在位置的 ../
对应的完整路径。
g++
命令不同的操作,我该如何纠正它的行为?请询问任何进一步的信息。
g++
,make -n
发出的命令并复制它们以自己运行它们,但是 make -n
在 cmake 之后给出了很多输出
所以我不明白到底发生了什么。pkg-config opencv4 --cflags --libs
的输出(换行以提高可读性):
-I/usr/include/opencv4/opencv -I/usr/include/opencv4 -lopencv_stitching
-lopencv_aruco -lopencv_bgsegm -lopencv_bioinspired -lopencv_ccalib
-lopencv_dnn_objdetect -lopencv_dnn_superres -lopencv_dpm -lopencv_highgui
-lopencv_face -lopencv_freetype -lopencv_fuzzy -lopencv_hdf -lopencv_hfs
-lopencv_img_hash -lopencv_line_descriptor -lopencv_quality -lopencv_reg
-lopencv_rgbd -lopencv_saliency -lopencv_shape -lopencv_stereo -lopencv_structured_light
-lopencv_phase_unwrapping -lopencv_superres -lopencv_optflow -lopencv_surface_matching
-lopencv_tracking -lopencv_datasets -lopencv_text -lopencv_dnn -lopencv_plot
-lopencv_ml -lopencv_videostab -lopencv_videoio -lopencv_viz -lopencv_ximgproc
-lopencv_video -lopencv_xobjdetect -lopencv_objdetect -lopencv_calib3d
-lopencv_imgcodecs -lopencv_features2d -lopencv_flann -lopencv_xphoto
-lopencv_photo -lopencv_imgproc -lopencv_core
最佳答案
Dan Masek 完全正确! (见评论)
我没有链接到同一版本,这是我通过打印 cmake
尝试的包含目录看到的。请在下面找到更正后的 CMakeLists.txt
文件。
cmake_minimum_required(VERSION 3.1)
project( main )
# Links to the wrong version of openCV
# find_package( OpenCV REQUIRED )
find_package(PkgConfig REQUIRED)
pkg_check_modules(OpenCV REQUIRED opencv4)
# MESSAGE(${OpenCV_INCLUDE_DIRS})
# MESSAGE(${OpenCV_LIBRARIES})
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -Wextra -pthread")
include_directories( ${OpenCV_INCLUDE_DIRS} )
add_executable( main main.cpp )
target_link_libraries( main ${OpenCV_LIBRARIES})
https://stackoverflow.com/questions/70839553/
相关文章:
rust - 您可以在正在构建的结构中引用先前初始化的字段吗?
postgresql - GROUP BY 时前两个值的差异
python - 如何使用 pybind11 从 C++ 调用 python 函数?
flutter - 如何修复此语法错误?不可为 null 的实例字段 'students' 必须初始
python - 有没有办法用mypy覆盖python中继承的类属性类型?
python-3.x - 跳过大型 XML 文件中的元素(python 3)
julia - JuMP 非线性优化约束被打破到 O(1e-9)