【问题标题】:Qt Creator Error: cannot find -lopencv_imgcodecsQt Creator 错误:找不到 -lopencv_imgcodecs
【发布时间】:2019-04-14 08:55:13
【问题描述】:

我已经通过windows上的VMware在ubuntu 15.10上安装了opencv、qt、qt creator、cmake。

opencv安装在这个目录中:/home/majidalaeinia/opencv/

project repository 被克隆到这个目录:/home/majidalaeinia/Desktop/imgwarp-opencv/

我想在 qt creator 中通过 CMakeLists.txt 运行 the project,当我在 qt creator 上按 Build now 时,我收到以下错误:

error: cannot find -lopencv_imgcodecs
error: collect2: error: ld returned 1 exit status

问题出在哪里,我该如何解决?

【问题讨论】:

  • 你的库 CMakeLists.txt 的库路径中有libopencv_imgcodecs.so 所在的目录吗?你在 CMake 中找到 find_package() 了吗?
  • 不,我没有这个文件。我应该如何将opencv链接到项目?请注意,它们位于不同的目录中。
  • 不同的文件夹没问题,只要你告诉 CMake 如何找到它。您是说您没有要链接的库(它可能是.a 而不是.so 或具有.so.1 甚至.so.2.55.3 之类的扩展名(数字选择半随机) )?
  • 我试过这些命令:find /home/majidalaeinia/opencv -type f -name "libopencv_imgcodecs"find /home/majidalaeinia/Desktop/imgwarp-opencv -type f -name "libopencv_imgcodecs",什么也没找到。
  • 你需要在里面加一颗星:find ~/opencv -name "libopencv*" 就足够了。

标签: c++ qt opencv cmake qt-creator


【解决方案1】:

@ Majid Alaeinia,从您发布的CMakeLists.txt 文件中没有指定CMAKE 应该如何找到您的项目请求的库。也没有 target_link_libraries 声明所以 CMAKE 不知道在哪里链接它们。希望以下小示例模板对您的项目有所帮助:

cmake_minimum_required (VERSION 3.1)
project(yourProject)

find_package( OpenCV REQUIRED )
find_package( Qt5 REQUIRED COMPONENTS Sql )

### this is for c++11
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(CMAKE_INCLUDE_CURRENT_DIR ON)

### QT stuff if you want a GUI
set(CMAKE_AUTOMOC ON)  # autogenerate qt gui features
set(CMAKE_AUTORCC ON)  # used for QT resource Files (if you need)

## Additional operation...

# From here you are specifically linking all OpenCV libraries and executables
### Add executables
add_executable(yourExecutable main/main.cpp ui/res/res.qrc ${SRCS} ${UI_HDRS} ${UI_SRCS})
target_link_libraries (yourProject example Qt5::Widgets ${OpenCV_LIBS}  Qt5::Sql)

### Add Library
add_library(yourProject_lib SHARED ${SRCS} ${UI_HDRS})
target_link_libraries (yourProject_lib example Qt5::Widgets ${OpenCV_LIBS})

【讨论】:

  • 谢谢,这可能会有所帮助,但我仍然不知道该怎么做,因为其他目录中也有其他 CMakeLists.txt。请检查repository
【解决方案2】:

@Majid Alaeinia,我上传了存储库并浏览了代码。如果您进入demo 文件夹,并用我在下面提供的文件更改当前的CMakeLists.txt 文件,它应该可以编译(它确实可以在我提供的更改下编译):

project(demo)
cmake_minimum_required(VERSION 2.6)
find_package(Qt5 REQUIRED COMPONENTS Widgets Core)
FIND_PACKAGE( OpenCV REQUIRED )

include_directories(${QT_INCLUDES} ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_SOURCE_DIR}/lib ${CMAKE_CURRENT_SOURCE_DIR})

set(demo_SRCS main.cpp projfile.cpp deformwin.cpp myimage.cpp singlephotoview.cpp pointspaint.cpp)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(CMAKE_INCLUDE_CURRENT_DIR ON)

#qt5_automoc(${demo_SRCS})

QT5_WRAP_CPP(QOBJ_CPP ${demo_SRCS})
qt5_wrap_ui(helloworld_FORMS_HEADERS deformwin.ui)
add_executable(demo ${demo_SRCS} ${helloworld_FORMS_HEADERS})
target_link_libraries(demo ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY} imgwarp-lib opencv_core opencv_imgproc opencv_imgcodecs)

存储库中的代码是旧代码,仍然带有Qt4 作为主要包装器。我认为您的计算机上可能安装了Qt5,实际上我提供的代码适用于Qt5。将其用作src 文件夹中存在的其他CMakeLists.txt 文件的指导,并相应地进行更改。

CMake 会编译,但因为使用了Qt4,所以你需要弄清楚要添加的最重要的模块,例如包含QtGui/QApplication 的新标准通常由QtWidgets/QApplication 代替

我还想留下我之前的答案,以防您需要起点或初始模板。我希望这能澄清一点,并能让你继续你的项目。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-11
    • 1970-01-01
    • 2021-11-15
    • 2021-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多