mrgloom 242 Жалоба Опубликовано August 14, 2015 (изменено) Пытаюсь собрать старый проект на Linuxпишет что то типа undefined reference to `cvCreateMat'cvCreateMat вроде как должно быть определено в opencv_coreИскал в хедерах grep -n -r cvCreateMat /home/blabla/libs/opencv-2.4.10/includeв makefile добавляю -lopencv_core в коде #include <core/core_c.h>проверял так же на присутствие в .so файлеnm -C libopencv_core.so > functions.txt grep -n cvCreateMat functions.txt но все равно та же ошибка makefileIFLAGS = -I/home/blabla/libs/opencv-2.4.10/include/opencv2 LFLAGS = -L/home/blabla/libs/opencv-2.4.10/lib OPENCVLIBS = -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_calib3d -lopencv_video -lopencv_features2d -lopencv_ml -lopencv_objdetect -lopencv_contrib -lopencv_legacy all: congealReal funnelReal clean: rm congealReal funnelReal congealReal: congealReal.cpp g++ $(IFLAGS) $(LFLAGS) $(OPENCVLIBS) -O3 -o congealReal congealReal.cpp funnelReal: funnelReal.cpp g++ $(IFLAGS) $(LFLAGS) $(OPENCVLIBS) -O3 -o funnelReal funnelReal.cppпроектhttps://github.com/mrgloom/Unsupervised-joint-alignment-of-complex-imagesверсия Opencv 2.4.10 Изменено August 14, 2015 пользователем mrgloom Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано August 14, 2015 Может в legacy посмотреть ? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано August 14, 2015 надо было так (т.е. либы указывать после) congealReal: congealReal.cpp g++ $(IFLAGS) $(LFLAGS) -O3 -o congealReal congealReal.cpp $(OPENCVLIBS) funnelReal: funnelReal.cpp g++ $(IFLAGS) $(LFLAGS) -O3 -o funnelReal funnelReal.cpp $(OPENCVLIBS) но логику я не понял Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
BeS 53 Жалоба Опубликовано August 15, 2015 А зачем писать make'файлы?:-)Не проще ли исопльзовать какую-нибудь систему автоматизации сборки типа cmake'а, который в opencv поддерживается из коробки?Ну и да, использовать ANSI C интерфейсы в OpenCV настоятельно не рекомендуется. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано August 24, 2016 Скрипты для поиска ф-ии #To find function in headers grep -n -r <function_name> <path_to_opencv_include_folder> #To find function in libs nm -C -A lib/*.so | grep <function_name> | grep -v U Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Nuzhny 243 Жалоба Опубликовано August 24, 2016 Видимо я совсем не настоящий линуксоид. Для разбора кода OpenCV открываю его в IDE (мой выбор QtCreator). В крайнем случае, использую mc для поиска по файлам и просмотра результата. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано August 30, 2016 Ну мой user case тут такой: Поиск в хедерах чтобы понять что такая ф-ия есть в opencv, по идее можно еще и по сорцам искать, но я обычно использую поиск на гитхабе. Поиск внутри либ для того чтобы понять какую либу надо включать для использования ф-ии, или можно не парится и включать вообще все либы opencv ? при линковке возьмется только нужное, размер файла не увеличится? т.е. тогда будет один Makefile на все проекты. А вообще эта тема всплыла когда я пытался собирать легаси opencv проекты и была куча undefined reference на старые ф-ии, но дело было не в том, что они отсуствуют, а в том что в Makefile важен порядок. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Nuzhny 243 Жалоба Опубликовано August 31, 2016 Если ты нашёл функцию в хедере, то автоматически знаешь и что подключать, нет? Зачем что-то отдельно искать? Я пользуюсь CMake и не парюсь по поводу порядка. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано August 31, 2016 Ну в хедере не написано как называется конкретная библиотека типа -lopencv_core А как CMake облегчает жизнь? Можете скинуть template для opencv проекта? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано August 31, 2016 cmake_minimum_required(VERSION 2.8) set (PROJ_NAME RectangleFinder) project(${PROJ_NAME}) set(CMAKE_BINARY_DIR ${CMAKE_SOURCE_DIR}/build) set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}) set(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}) FIND_PACKAGE(OpenCV) set(folder_source main.cpp ) set(folder_header ) SOURCE_GROUP("Source Files" FILES ${folder_source}) SOURCE_GROUP("Header Files" FILES ${folder_header}) ADD_EXECUTABLE(${PROJ_NAME} ${folder_source} ${folder_header}) TARGET_LINK_LIBRARIES(${PROJ_NAME} ${OpenCV_LIBS} ) Я такой юзаю для быстрого создания проектов под VS. 1 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано August 31, 2016 А как это работает FIND_PACKAGE(OpenCV) OpenCV должен быть установлен каким то специальным образом? на линуксе через apt-get? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано August 31, 2016 Потестил в линуксе, работает как положено. Я собирал OpenCV сам, все стандартно: git clone -> cmake -> make -> sudo make install. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Nuzhny 243 Жалоба Опубликовано August 31, 2016 4 hours ago, mrgloom said: Ну в хедере не написано как называется конкретная библиотека типа -lopencv_core Я по названию хедера и пути к нему сразу понимаю из какого он модуля. То есть хедер от highgui явно не будет лежать в моделу core. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах