我正在尝试编译Sam Hare的Struck code。
我正在使用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)
有什么想法吗?谢谢!
答案 0 :(得分:22)
当我只是尝试从两个不同的目标文件(main.o和add.o)创建可执行文件时,我遇到了类似的警告/错误/失败。我正在使用命令:
gcc -o exec main.o add.o
但我的程序是一个C ++程序。使用g++
编译器解决了我的问题:
g++ -o exec main.o add.o
我总是认为gcc
可以自己解决这些问题。显然不是。我希望这有助于其他人搜索此错误。
答案 1 :(得分:9)
答案 2 :(得分:0)
我在 .h 文件中写了我的声明
class String
{
String (const char * cstr = 0);
};
并且我在另一个 .cpp 文件中使用了内联(实现)
inline String::String(const char * cstr)
{
//code ...
}
然后我使用 g++ 并得到这个: 体系结构 x86_64 的未定义符号: "String::String(char const*)",引用自: _main 在 test-d389f3.o ld: 找不到架构 x86_64 的符号
解决方案:当声明和实现是独立的时,不要写inline。