我正在尝试在我的iPhone应用程序中使用C ++静态库,该应用程序使用适用于iOS的OpenCV的修改版本,我在链接时遇到了这个问题:
Undefined symbols for architecture armv7:
"___sincos_stret", referenced from:
cv::initInterTab2D(int, bool) in opencv2(imgwarp.o)
ld: symbol(s) not found for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)
我真的不明白我错过了什么,这个功能似乎不存在于OpenCV中,我在网上找不到任何有意义的东西;我想知道它是否在某个数学库中,但我还没有找到任何东西。
我用Clang编译OpenCV并使用默认的libc ++库。
libmylibrary.a和OpenCV2框架正确地位于链接库列表中。
我是XCode的新手,因此在编译静态库和/或将其链接到我的项目中时,我可能会遗漏一些微不足道的东西。
我没有更改该对象的源代码,因为我的更改与OpenCV的imgproc模块的另一部分有关,因此我想即使使用默认版本也可能发生这种情况。
你有线索吗?
答案 0 :(得分:4)
为了解决Xcode 5工具链中的这个问题,我将支持的最低iOS版本指定为编译器选项,以匹配Xcode中的配置。例如:
-miphoneos-version-min=5.0
您可以将其添加到makefile
中的C和CXX标志CFLAGS += -miphoneos-version-min=5.0
CXXFLAGS += -miphoneos-version-min=5.0
答案 1 :(得分:3)
对于那些不想使用较低版本的XCode构建的人,请尝试更改OpenCV iOS的python构建脚本。在build_framework.py中,我在行中添加了IPHONEOS_DEPLOYMENT_TARGET=6.0
并为iOS重建了OpenCV。
os.system("xcodebuild -parallelizeTargets ARCHS=%s -jobs 8 -sdk %s -configuration Release -target ALL_BUILD" % (arch, target.lower()))
os.system("xcodebuild ARCHS=%s -sdk %s -configuration Release -target install install" % (arch, target.lower()))
获取
os.system("xcodebuild IPHONEOS_DEPLOYMENT_TARGET=6.0 -parallelizeTargets ARCHS=%s -jobs 8 -sdk %s -configuration Release -target ALL_BUILD" % (arch, target.lower()))
os.system("xcodebuild IPHONEOS_DEPLOYMENT_TARGET=6.0 ARCHS=%s -sdk %s -configuration Release -target install install" % (arch, target.lower()))
对我来说,解决了这个问题。关于符号__sincos_stret
的精彩阅读TODO:虽然这解决了这个问题,但是在从python脚本生成的OpenCV.xcodeproj(在build文件夹中)中,它仍然具有iOS 7.0的部署目标。可能会有一种更清洁的方式。
答案 2 :(得分:1)
在安装XCode 5开发人员预览并使用build_framework.py
脚本构建OpenCV后,我遇到了这个问题。 ___sincos_stret
似乎来自使用新的编译器版本。
我通过更改命令行工具的路径来修复此问题。
在终端中,验证XCode命令行路径:
xcode-select --print-path
如果它在XCode5-DP.app
内打印路径,则切换到Xcode 4的工具:
xcode-select --switch /Applications/XCode.app/Contents/Developer
重建框架。然后尝试重新编译项目。
答案 3 :(得分:0)
在其他地方快速搜索支持Adam的问题时,符号在[path to SDK]/usr/lib/system/libsystem_m.dylib
中定义。证明:
nm /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/usr/lib/system/libsystem_m.dylib | grep sincos
不要坚持使用旧版本的工具或SDK,只需确保您与之相关联。