2016-04-21 129 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

由于项目提供了'CMakeLists.txt',使用'CMake'生成一个makefile会更简单。 – drescherjm

+0

尝试添加库搜索路径到opencv库 g ++ $(pkg-config --cflags --libs opencv)-I/usr/local/Cellar/opencv3/3.1.0_1/include -I/usr/local/Cellar /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,但如何处理这些东西?谢谢 – printemp

回答

1

已正确安装gsl B)传递给g ++对gsl库所在lib目录的引用(可能类似于/ 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上的文件,在OS X名为.dylib),-I告诉它在哪里可以找到头,-l(这是一个小写L)告诉它链接到库,它将被命名为libgsl.so或libgsl.dylib。

首先尝试添加-lgsl标志,然后如果它找不到libgsl.so(或.dylib),则添加-L标志。注意:/ path/to/gsl/libs和/ path/to/headers不是您应该直接放在那里的内容,而是将它们替换为系统上的实际路径。

相关问题