Подтвердить что ты не робот

G++ ld: символы (символы), не найденные для архитектуры x86_64

Я пытаюсь скомпилировать Sam Hare удаленный код.

Я использую mac OSX10.9, opencv 2.4.6 и Eigen 2.0.17.

Заголовки Eigen и opencv хранятся в /opt/local/include, в то время как opencv dylib в /opt/local/lib.

Я изменил Hare Makefile для работы над этой папкой. Когда я набираю make на терминале:

g++ -L/opt/local/lib -lopencv_core -lopencv_highgui -lopencv_imgproc src/Config.o src/Features.o src/HaarFeature.o src/HaarFeatures.o src/HistogramFeatures.o src/ImageRep.o src/LaRank.o src/MultiFeatures.o src/RawFeatures.o src/Sampler.o src/Tracker.o src/main.o src/GraphUtils/GraphUtils.o -o struck

Я получаю следующие ошибки:

Undefined symbols for architecture x86_64:  
"cv::namedWindow(std::__1::basic_string<char,
std::__1::char_traits<char>, std::__1::allocator<char> > const&,
int)", referenced from:
      _main in main.o   "cv::split(cv::Mat const&, std::__1::vector<cv::Mat, std::__1::allocator<cv::Mat> >&)",
referenced from:
      ImageRep::ImageRep(cv::Mat const&, bool, bool, bool) in ImageRep.o   "cv::imread(std::__1::basic_string<char,
std::__1::char_traits<char>, std::__1::allocator<char> > const&,
int)", referenced from:
      _main in main.o   "cv::imshow(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&,
cv::_InputArray const&)", referenced from:
      LaRank::Debug() in LaRank.o
      Tracker::Debug() in Tracker.o
      _main in main.o ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see
invocation)

Любые идеи? Спасибо!

4b9b3361

Ответ 1

наконец-то решила мою проблему.

Я создал новый проект в XCode с источниками и изменил стандартную библиотеку С++ по умолчанию libС++ на libstdС++, как в этом и это.

Ответ 2

У меня было аналогичное предупреждение/ошибка/сбой, когда я просто пытался сделать исполняемый файл из двух разных объектных файлов (main.o и add.o). Я использовал команду:

gcc -o exec main.o add.o

Но моя программа - это программа на С++. Использование компилятора g++ решило мою проблему:

g++ -o exec main.o add.o

У меня всегда создавалось впечатление, что gcc может самостоятельно разобраться в этом. Очевидно нет. Надеюсь, это поможет кому-то еще найти эту ошибку.