我正在编译山姆兔的Struck code。
我用的是Mac OS X 10.9,开放式系统2.4.6和Eigen 2.0.17。
特征标头和opencv标头存储在/opt/local/include中,而opencv动态库存储在/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)
有什么主意吗?谢谢!
5条答案
按热度按时间7cwmlq891#
当我尝试从两个不同的目标文件(main.o和add.o)创建一个可执行文件时,我遇到了类似的警告/错误/失败。
gcc -o exec main.o add.o
但是我的程序是一个C++程序,使用
g++
编译器解决了我的问题:g++ -o exec main.o add.o
我一直有这样的印象,
gcc
可以自己弄清楚这些事情。显然不是。我希望这能帮助其他人搜索这个错误。vfhzx4xs2#
终于解决了我的问题。
我在XCode中创建了一个包含源代码的新项目,并将C标准库从默认的libc更改为libstdc++,如this和this中所示。
kninwzqo3#
我得到了同样的错误。我不认为这是一个“修复”,但我的解决方案是也包括cpp文件。所以,而不是只是把
我得把
mwecs4sa4#
我在.h文件中写了声明
并且我在另一个.cpp文件中使用了inline(实现)
然后我用g++得到这个:x86_64架构的未定义符号:“字符串::字符串(字符常量 *)",引用自:_测试-d389 f3中的主文件。文件名:未找到体系结构x86_64的符号
解决方案:当声明和实现是独立时,不要编写inline。
ma8fv8wu5#
当我用
clang
编译一个C++程序时,我也有类似的错误。但是在我改用
chang++
之后,编译工作了。