неопределенная ссылка на `main '- но основная функция включена

0

При попытке скомпилировать мой код возникает следующая ошибка:

/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../x86_64-linux-gnu/crt1.o: In function '_start':
(.text+0x20): undefined reference to 'main'
collect2: error: ld returned 1 exit status

Я использую следующую команду:

g++ detectTemplatePoints.cpp -o SURF_TemplatePoints 'pkg-config --cflags --libs opencv'

Из того, что я могу найти в Интернете, похоже, это происходит, когда у вас нет main точки входа, но у меня есть это, мой код ниже:

#include <stdio.h>
#include <iostream>
#include "opencv2/core/core.hpp"
#include "opencv2/features2d/features2d.hpp"
#include "opencv2/nonfree/features2d.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/nonfree/nonfree.hpp"
using namespace cv;

void readme();
int main (int argc, char* argv[]) {
  if( argc != 2 ) {
    readme(); return -1; 
  }
  Mat img_1 = imread( argv[1], CV_LOAD_IMAGE_GRAYSCALE );
  if( !img_1.data ) { 
    std::cout<< " --(!) Error reading images " << std::endl; return -1; 
  }
  int minHessian = 400;
  SurfFeatureDetector detector( minHessian );
  std::vector<KeyPoint> keypoints_1;
  detector.detect( img_1, keypoints_1 );
  Mat img_keypoints_1;
  drawKeypoints( img_1, keypoints_1, img_keypoints_1, Scalar::all(-1), DrawMatchesFlags::DEFAULT );
  imshow("Keypoints 1", img_keypoints_1 );
  waitKey(0);
  return 0;
}
void readme() {
  std::cout << " Usage: ./detectTemplatePoints <img1>" << std::endl;
}

Что вызывает эту ошибку?

  • 1
    Это не может быть ваш полный код, есть что-то большее, и проблема, вероятно, в этом (например, макрос выходит из строя)
  • 0
    Какова цель возврата -1 в четвертой строке?
Показать ещё 16 комментариев
Теги:
opencv
main
undefined-reference

2 ответа

1

Как говорится в сообщении об ошибке: у вас нет main функции. Они должны иметь одну из следующих подписей:

int main()

или

int main(int, char**)
  • 2
    У меня есть main функция, объявленная во второй строке?
  • 0
    добавлено объяснение, почему у вас нет комментариев
Показать ещё 3 комментария
0

Прежде всего, вы должны использовать g++ detectTemplatePoints.cpp -o SURF_TemplatePoints $(pkg-config --cflags --libs opencv), чтобы связать библиотеки opencv.
Кроме того, вы не показали нам библиотеки, в которые вы входите. Я могу скомпилировать его так:

#include <iostream>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/nonfree/features2d.hpp>

using namespace std;
using namespace cv;

void readme();

int main (int argc, char** argv) {
  if( argc != 2 ) {
    readme(); return -1; 
  }
  Mat img_1 = imread( argv[1], CV_LOAD_IMAGE_GRAYSCALE );
  if( !img_1.data ) { 
    std::cout<< " --(!) Error reading images " << std::endl; return -1; 
  }
  int minHessian = 400;
  SurfFeatureDetector detector( minHessian );
  std::vector<KeyPoint> keypoints_1;
  detector.detect( img_1, keypoints_1 );
  Mat img_keypoints_1;
  drawKeypoints( img_1, keypoints_1, img_keypoints_1, Scalar::all(-1), DrawMatchesFlags::DEFAULT );
  imshow("Keypoints 1", img_keypoints_1 );
  waitKey(0);
  return 0;
}
void readme() {
  std::cout << " Usage: ./detectTemplatePoints <img1>" << std::endl;
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню