___sincos_stret链接时未定义的符号

时间:2013-09-25 21:50:26

标签: c++ xcode macos xcode5

与前面提到的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

4 个答案:

答案 0 :(得分:13)

stret是苹果公司代表的“回归结构”。 ___sincos_stret是一个LLVM优化 - 如果您编写的代码调用sin(n)然后cos(n)并使用两个结果,那么编译器将调用结构返回的sincos方法,接收结构两件事都在里面。如果操作数是相同的,那么一次计算两者而不是单独计算会更快。

在肤浅的浏览中,我无法在sin中看到cosinitInterTab2D,但我希望内容正在内嵌。

虽然我在尝试:

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