我可以用 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
的输出在本问题的附录中提供。
然后程序完美运行,我可以在新窗口中看到我的.jpg
文件。
我决定使用cmake
编译它,遵循 openCV 提供的示例。我的程序(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
后给出了很多输出,所以我不明白到底发生了什么。
附录
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})
相关文章:
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- libssh 的函数在构建 libssh 时无法在 Qt 和 cmake 错误中找到
- 使用 cmake 的 Linux 终端上的"Conversion to non-scalar type is requested"错误
- FindPackageHandleStandardArgs.cmake:137 的 CMake 错误(消息):找不到 Boost (缺少:正则表达式)(找到合适的版本"1.72.0",
- Clion显示错误,但可以使用Cmake成功构建代码
- 链接 cmake 时出现未定义的引用错误
- CMake 错误"源似乎不包含 CMakeLists.txt",路径/库连接问题
- 尝试将 boost::stacktrace 添加到 CMake 项目时出现构建错误
- 对 CMake 中'cudaRegisterLinkedBinary'链接错误的未定义引用?
- "Cannot find -l<directory>"错误 - CMake
- CMake 错误 - 目标 foo INTERFACE_SOURCES属性包含在源目录中以前缀为前缀的路径
- CMake 错误:链接器命令失败,退出代码为 1 和 cpp.o 文件
- 使用纯 CMake 构建 SFML 时出现运行时错误
- 提升日志链接错误(Cmake Mingw32)
- 动态链接错误cmake
- cmake 错误"CMake 错误:源目录 ".../p4c/build/[-DCMAKE_BUILD_TYPE=RELEASE" 不存在
- 链接错误-CMake 3.4.1和Visual Studio 2010
- 包含库的c++运行文件失败而没有编译错误(CMake / CLion)
- CMake错误:CMake无法确定目标myapp的链接器语言
- Clion 错误 cmake python 嵌入式