OpenCV未解析的符号 - 名称错位不匹配 - xcode

时间:2012-11-19 20:11:37

标签: xcode opencv name-mangling

我在运行Lion的Macbook上使用

在本地构建了i386的OpenCV风格
cmake -G "Unix Makefiles" -D CMAKE_OSX_ARCHITECTURES=i386 -D CMAKE_C_FLAGS=-m32 -D CMAKE_CXX_FLAGS=-m32 ..
make -j8
sudo make install

构建并发布的库很好,我已将它们添加到我的xcode项目中。 但是,在构建我的测试应用程序时会出现链接错误,而且它们似乎是名称错位问题。

Undefined symbols for architecture i386: "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::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: _main in main.o

以cv :: imread为例,它从libopencv_highgui.dylib导出,名称为:

00007510 (__TEXT,__text) external __ZN2cv6imreadERKSsi 

而main.o引用符号

U __ZN2cv6imreadERKNSt3__112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEEi

另一方面,来自同一dylib链接的函数__ZN2cv7waitKeyEi很好。

测试应用程序和框架都适用于i386 arch。

可能导致此问题的任何想法?

2 个答案:

答案 0 :(得分:2)

我遇到了同样的问题。我认为问题可能是如果您使用the MacPorts来编译OpenCV库,它们可能是由GCC根据it's Portfile构建的。我将XCode(Apple LLVM 4.1)中使用的编译器切换到LLVM GCC 4.2,现在它可以正常工作。

希望它有所帮助。

答案 1 :(得分:0)

我遇到了同样的问题,并使用libstdc ++作为C ++标准库来修复它。它默认为libc ++

在项目构建设置下 - &gt; APPLE LLVM编译器4.2 - 语言 - &gt; C ++标准库