Ошибка создателя Qt: не удается найти -lopencv_imgcodecs - PullRequest
0 голосов
/ 11 апреля 2019

Я установил opencv, qt, qt creator, cmake на Ubuntu 15.10 через VMware на Windows.

opencv установлен в этом каталоге: /home/majidalaeinia/opencv/

Хранилище проекта клонировано в этом каталоге: /home/majidalaeinia/Desktop/imgwarp-opencv/

Я хочу запустить проект через CMakeLists.txt в QT Creator, и когда я нажимаю Build now на QT Creator, я получаю следующие ошибки :

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

Где проблема и как я могу ее решить?

Ответы [ 2 ]

2 голосов
/ 13 апреля 2019

@ 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})
1 голос
/ 14 апреля 2019

@ Маджид Алаейния, я загрузил репозиторий и просмотрел код.если вы войдете в папку 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.Используйте его в качестве руководства для другого файла CMakeLists.txt, присутствующего в папке src, и внесите соответствующие изменения.

CMake скомпилируется, но поскольку он использовался Qt4, вам нужно выяснить наиболее важные модули для добавления, например, новый стандарт для включения QtGui/QApplication обычно заменяется на QtWidgets/QApplication

Я также хотел оставить свой предыдущий ответ на тот случай, если вам понадобится начальная точка или начальный шаблон.Я надеюсь, что это прояснит немного больше и поможет вам продвинуться вперед для вашего проекта.

...