簡體   English   中英

我可以使用 g++ 進行編譯,但得到一個具有等效 cmake 的錯誤程序(GTK 錯誤)

[英]I can compile with g++ but get a buggy program with equivalent cmake (GTK error)

我在main.cpp中有一個非常簡單的程序,它顯示帶有 openCV 的圖像。 我使用以下命令編譯它:

g++ -o main main.cpp $(pkg-config opencv4 --cflags --libs)

此問題的附錄中提供了pkg-config opencv4 --cflags --libs的 output 。

然后程序完美運行,我可以在新的 window 中看到我的.jpg文件。

我決定按照 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所在位置的完整路徑。

我的問題

  • 為什么我的 cmake 會在此處與我的簡單g++命令做任何不同的事情,我該如何糾正它的行為?

請詢問任何進一步的信息。

試過了

  • 更改了 C++ 標准,強制 cmake 使用g++
  • 試圖查看使用make -n發出的命令並復制它們以自己運行它們,但是make -n在 cmake 之后給出了很多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

丹·馬塞克絕對正確! (看評論)

我沒有鏈接到相同的版本,我通過打印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})

暫無
暫無

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

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