OpenCV未解决的符号 - 名称混淆不匹配 - Xcode

3

我在我的笔记本电脑(Macbook Lion系统)上本地搭建了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项目中。但是,在构建测试应用程序时出现了链接错误,并且它们似乎是名称混淆问题。

i386架构下未定义的符号: "cv::namedWindow(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, int)", 在main.o中引用: _main in main.o "cv::imread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, int)", 在main.o中引用: _main in main.o "cv::imshow(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, cv::_InputArray const&)", 在main.o中引用: _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架构的。

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

2个回答

2
我遇到了同样的问题。我认为问题可能是,如果您使用MacPorts编译OpenCV库,则它们可能是根据其Portfile由GCC构建的。我将XCode中使用的编译器(Apple LLVM 4.1)切换到LLVM GCC 4.2,现在它可以正常工作了。
希望这有所帮助。

0
我遇到了同样的问题,并通过使用libstdc++作为C ++标准库来解决它。 它默认为libc ++。
在项目构建设置下 -> APPLE LLVM编译器4.2 - 语言 -> C ++标准库。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接