我在运行 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
另一方面,__ZN2cv7waitKeyEi
来自同一个 dylib 链接的函数很好。
测试应用程序和框架都适用于 i386 arch。
任何想法可能导致此问题?