2016-04-21 3 views
2

Я новичок в cpp, хочу иметь реализацию фильтра частиц, я пытаюсь запустить здесь код https://github.com/NewProggie/Particle-Filter, который является структурированным и понятным проектом. Но когда я пытаюсь скомпилировать и ссылка:Неопределенные символы для архитектуры x86_64: связывание ошибки?

g++ $(pkg-config --cflags --libs opencv) -I/usr/local/Cellar/opencv3/3.1.0_1/include -I /usr/local/Cellar/gsl/1.16/include -stdlib=libc++ main.cpp -o main 

Я следующие связывающей проблемы:

Undefined symbols for architecture x86_64: 
"colorFeatures::colorFeatures()", referenced from: 
    _main in main-2b4c23.o 
"colorFeatures::~colorFeatures()", referenced from: 
    _main in main-2b4c23.o 
"adaboostDetect::detectObject(_IplImage*, CvRect**)", referenced from: 
    _main in main-2b4c23.o 
"adaboostDetect::adaboostDetect()", referenced from: 
    _main in main-2b4c23.o 
"tracker::addObjects(_IplImage*, CvRect*, int)", referenced from: 
    _main in main-2b4c23.o 
"tracker::initTracker(_IplImage*, CvRect*, int, int)", referenced from: 
    _main in main-2b4c23.o 
"tracker::showResults(_IplImage*)", referenced from: 
    _main in main-2b4c23.o 
"tracker::next(_IplImage*)", referenced from: 
    _main in main-2b4c23.o 
"tracker::tracker()", referenced from: 
    _main in main-2b4c23.o 
"tracker::~tracker()", referenced from: 
    _main in main-2b4c23.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

Было бы проще использовать 'CMake' для создания make-файла, так как проект предоставляет' CMakeLists.txt'. – drescherjm

+0

Попробуйте добавить путь поиска библиотеки к библиотеке opencv g ++ $ (pkg-config --cflags --libs opencv) -I/usr/local/Cellar/opencv3/3.1.0_1/include -I/usr/local/Подвал /gsl/1.16/include -L/usr/local/Cellar/opencv3/3.1.0_1/lib -stdlib = libC++ main.cpp -o main –

+0

@drescherjm: спасибо, но не могли бы вы рассказать мне, как это сделать дальше? Я мог бы использовать cmake для создания папки CMakeFiles, main.app, cmake_install.cmake, но что делать с этими материалами? thanks – printemp

ответ

1

есть gsl установлен правильно B) перейти к g ++ ссылку на каталог lib, где расположены библиотеки gsl (возможно, что-то вроде/usr/lib или/usr/local/lib, местоположения для компоновщика для поиска), а также там, где находятся файлы заголовков, а также сообщить компоновщику, чтобы сделать ссылку.

g++ -o <name of executable> -L/path/to/gsl/libs -I/path/to/headers -lgsl <name of source file> 

-L говорит ему, где найти библиотеки (.so файлы на Linux, .dylib на OS X), -I говорит ему, где найти заголовки, -l (это нижний регистр L) говорит, что он ссылается на библиотеку, которая будет называться libgsl.so или libgsl.dylib.

Сначала попробуйте добавить флаг -lgsl, а затем, если он не может найти libgsl.so (или .dylib), добавьте флаг -L. ПРИМЕЧАНИЕ./Path/to/gsl/libs и/path/to/headers - это не то, что вы должны буквально положить туда, но замените их фактическими путями в вашей системе.

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