与前面提到的here一样,在使用Xcode5命令行工具编译使用此符号的项目时,找不到___sincos_stret
。
在上面提到的线程中,为IOS目标发布了一个解决方案(将-miphoneos-version-min=5.0
传递给编译器),桌面(x64
)目标是否有解决方案?
例如,在尝试编译polycode时,我就会发生这种情况。
编辑2:
奇怪的是,在手动编译上一个错误中引用的库之后,错误现在恰好位于lto.o,这是一个内部llvm标头本身......
undef: ___sincos_stret
Undefined symbols for architecture x86_64:
"___sincos_stret", referenced from:
_mdct_init in lto.o
_dradfg in lto.o
我正在使用Xcode 5运行OSX 10.9 DP。This is the link step。
答案 0 :(得分:13)
stret
是苹果公司代表的“回归结构”。 ___sincos_stret
是一个LLVM优化 - 如果您编写的代码调用sin(n)
然后cos(n)
并使用两个结果,那么编译器将调用结构返回的sincos方法,接收结构两件事都在里面。如果操作数是相同的,那么一次计算两者而不是单独计算会更快。
在肤浅的浏览中,我无法在sin
中看到cos
或initInterTab2D
,但我希望内容正在内嵌。
虽然我在尝试:
cd /Applications/Xcode.app/Contents/Developer/Platforms
grep -lr ___sincos_stret *
通过它并在可能的结果上使用nm
,我发现{7.0}和OS X中的___sincos_stret
函数从10.9开始作为libsystem_m.dylib
的一部分。例如。如果您的Xcode安装在默认位置,请尝试:
nm /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/usr/lib/system/libsystem_m.dylib | grep sincos
和/或:
nm /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/lib/system/libsystem_m.dylib | grep sincos
你会在其中任何一个中看到符号。因此,正确的解决方案是在Xcode中设置较旧的部署目标,或在makefile中执行等效的。
答案 1 :(得分:6)
您需要-mmacosx-version-min=10.8
(或您的目标操作系统版本)。
答案 2 :(得分:3)
似乎没有重新安装Xcode5 DP和OSX 10.9命令行工具解决了这个问题。我想从以前的版本更新有问题。
答案 3 :(得分:2)
在文本编辑器中打开以下文件 /opt/local/etc/macports/macports.conf 并添加一行像
# MACOSX_DEPLOYMENT_TARGET - osx version to be compatible with earlier OSX version.
macosx_deployment_target 10.8
MACOSX_DEPLOYMENT_TARGET 10.8