#c #qt #opencv #cmake #qt-creator
#c #qt #opencv #cmake #qt-creator
Вопрос:
Я установил 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
В чем проблема и как я могу ее решить?
Комментарии:
1. Есть ли у вас каталог, в котором
libopencv_imgcodecs.so
он существует в вашей библиотеке CMakeLists.txt путь к библиотеке? Вы находите это в CMake сfind_package()
помощью?2. Нет, у меня нет этого файла. Как я должен связать opencv с проектом? Пожалуйста, обратите внимание, что они находятся в разных каталогах.
3. Разные папки в порядке, если вы сообщите CMake, как его найти. Вы хотите сказать, что у вас нет той библиотеки, с которой вы хотите связать (это может быть a
.a
вместо a.so
или иметь расширение типа.so.1
или четное.so.2.55.3
(числа, выбранные полуслучайно))?4. Я попробовал эти команды:
find /home/majidalaeinia/opencv -type f -name "libopencv_imgcodecs"
иfind /home/majidalaeinia/Desktop/imgwarp-opencv -type f -name "libopencv_imgcodecs"
ничего не нашел.5. Вам нужно добавить туда звездочку:
find ~/opencv -name "libopencv*"
должно быть достаточно.
Ответ №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})
Комментарии:
1. Спасибо, это может помочь, но я до сих пор не знаю, как это сделать, потому что
CMakeLists.txt
в других каталогах есть и другие. Пожалуйста, проверьте репозиторий .
Ответ №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
. Используйте его в качестве ориентира для другого CMakeLists.txt
файла, присутствующего внутри src
папки, и измените соответствующим образом.
CMake
будет скомпилирован, но поскольку он использовался Qt4
, вам нужно определить наиболее важные модули для добавления, например, новый стандарт для включения QtGui/QApplication
обычно заменяется QtWidgets/QApplication
Я также хотел оставить свой предыдущий ответ на случай, если вам нужна отправная точка или начальный шаблон. Я надеюсь, что это прояснит немного больше и поможет вам продвинуться вперед в вашем проекте.