G ++ возвращает ошибки после попытки компиляции с openCV с использованием G ++ - PullRequest
2 голосов
/ 15 октября 2019

Я пытаюсь запустить простой файл c ++, который включает библиотеки openCV и создает простой Mat. К сожалению, когда я пытаюсь скомпилировать файл, используя g ++, он возвращает ряд ошибок.

До сих пор я пытался удалить определение Mat все вместе и просто включил файлы openCV, что сработало! Я новичок в командной строке, поэтому я не уверен, что это проблема с тем, как я использую g ++. Тем не менее, я немного поработал над openCV в XCode (хотя с XCode нет необходимости работать в командной строке, так как все выстроено аккуратно во время выполнения).

Кроме того, это моя первая публикация в Stack Overflow, поэтому я, возможно, допустил ошибку при форматировании.

Это мой файл main.cpp, который я пытаюсь скомпилировать. Как я упоминал ранее, если я удалю строку «Mat test;», она успешно скомпилируется и запишет в консоль как следует.

#include <iostream>
#include <string>

#include <opencv2/core.hpp>
#include <opencv2/imgproc.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/videoio.hpp>


using namespace std;
using namespace cv;

int main() {
        Mat test;
        cout << "Mat Defined!" << endl;
        return(0);
}

Это команда g ++, которую я использую:

g++ -o main.out main.cpp

и вот эта ошибка, которую я получаю, когда пытаюсь ее запустить:

/usr/bin/ld: /tmp/ccbbhoNd.o: in function `cv::Mat::~Mat()':
main.cpp:(.text._ZN2cv3MatD2Ev[_ZN2cv3MatD5Ev]+0x3c): undefined reference to `cv::fastFree(void*)'
/usr/bin/ld: /tmp/ccbbhoNd.o: in function `cv::Mat::release()':
main.cpp:(.text._ZN2cv3Mat7releaseEv[_ZN2cv3Mat7releaseEv]+0x68): undefined reference to `cv::Mat::deallocate()'
collect2: error: ld returned 1 exit status

Любая помощь очень ценится. Я также отказался от подробного флага для g ++, поскольку он возвращал тонну строк, и я не был уверен, что люди думают о 50+ строках кода. Большое спасибо!

Ответы [ 2 ]

1 голос
/ 15 октября 2019

Сбой, потому что вы не связали библиотеки в вашей команде. Во время компиляции ваша операционная система не может получить доступ к библиотекам opencv, потому что вы не обращались к ним. Вам необходимо скомпилировать ваш файл cpp, используя следующий код:

g++ -std=c++11 main.cpp `pkg-config --libs --cflags opencv` -o output
1 голос
/ 15 октября 2019

У вас проблема с подключением к библиотеке OpenCV. Вам нужно перейти к информации программы ld, где найти все необходимые библиотеки. В вашем случае это будет:

g++ -I/usr/local/include/opencv -I/usr/local/include/opencv2 -L/usr/local/lib/ -o main.out  main.cpp -lopencv_core

Все флаги компоновщика OpenCV:

-lopencv_calib3d
-lopencv_contrib
-lopencv_core
-lopencv_features2d
-lopencv_flann
-lopencv_highgui
-lopencv_imgproc
-lopencv_legacy
-lopencv_ml
-lopencv_nonfree
-lopencv_objdetect
-lopencv_photo
-lopencv_stitching
-lopencv_superres
-lopencv_ts
-lopencv_video
-lopencv_videostab

В конце концов я предлагаю перейти в систему сборки CMake для вашего проекта C ++. С OpenCV компилировать программу намного проще. Оформить заказ Документы . CMake подготовит для вас make-файл со всеми необходимыми зависимостями.

С наилучшими пожеланиями!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...