我正在尝试将最新版本的OpenCV包含到现有iOS项目中,并且因为我的XCode项目设置为使用libstdc ++而不是libc ++ / C ++ 11支持而导致链接器错误。
我见过其他几个通过启用libc ++修复错误的人。例子:
但是,我需要使用libstdc ++,因为我有其他第三方库已经使用较旧的stdlib编译(无法更改)。有没有办法在没有-stdlib = libc ++的情况下编译OpenCV 2.4.3+?是否有特殊标志传递给CMake?或者OpenCV源代码的ios文件夹中的build_framework.py脚本?
或者,是否有人可以使用二进制版本?似乎所有可从OpenCV下载的都假定为libc ++ / C ++ 11。
答案 0 :(得分:10)
在openCV的源代码中找到此文件:
ios/cmake/Modules/Platform/iOS.cmake
更改此行:
set (CMAKE_CXX_FLAGS "-stdlib=libc++ -headerpad_max_install_names -fvisibility=hidden -fvisibility-inlines-hidden")
到:
set (CMAKE_CXX_FLAGS "-stdlib=libstdc++ -headerpad_max_install_names -fvisibility=hidden -fvisibility-inlines-hidden")
使用python脚本编译
ios/build_framework.py
然后你应该好好去
我刚刚在2.4.3源代码上尝试了这个,在现有项目中交换了生成的框架,将项目的C ++标准库更改为libstdc ++并且运行正常。
答案 1 :(得分:1)
我也在使用OpenCV和需要libstdc ++的第三方库进行项目。
我自己刚遇到这个问题,我想分享一下对我有用的东西。
通过在我的项目中添加“libc ++。dylib”,我能够使OpenCV工作。
构建阶段 - > “Link Binary with Libraries” - > “+” - >的libc ++。dylib
供参考,我正在使用opencv.org的OpenCV 2.4.9(opencv-2.4.9)。我根据OpenCV文档中的说明使用ios平台build_framework.py编译它。无需修改。