2013-11-06 4 views
23

Я пытаюсь скомпилировать Sam Hare's Struck code.g ++ ld: символы (символы) не найдены для архитектуры x86_64

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

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

Я модифицировал Makefile Hare для работы над этой папкой. Когда я печатаю сделать на терминале:

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) 

Любые идеи? Благодаря!

+0

У вас есть конфликт между 32-битными и 64-битными библиотеками. – klm123

+0

Хорошо, на самом деле я понятия не имею, как его решить. Любой намек? – mbPro

+0

Вам нужно проверить все библиотеки, с которыми вы связываетесь, 32 или 64 бита. Я не знаю, как это сделать, если вы не знаете, где вы их получите. – klm123

ответ

9

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

Я создал новый проект в XCode с источниками и сменил стандартную библиотеку C++ по умолчанию libC++ на libstdC++, как в this и this.

+1

В моем случае, добавив 'libC++. Dylib' в Frameworks, проблема была решена. Надеюсь, это поможет кому-то. – Sandeep

10

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

gcc -o exec main.o add.o

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

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

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

+1

Это было именно то, что мне нужно, спасибо. – elo80ka

Смежные вопросы

 Смежные вопросы