14

与前面提到的此处一样,___sincos_stret在使用 Xcode5 命令行工具编译使用此符号的项目时找不到。

在上面引用的线程中,发布了针对 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。这是链接步骤

4

4 回答 4

14

stret是 Apple 所说的“返回结构”。___sincos_stret是一种 LLVM 优化——如果你编写的代码调用sin(n)然后cos(n)使用这两个结果,那么编译器将对返回结构的 sincos 方法进行一次调用,接收一个包含这两种结果的结构。如果操作数相同,则同时计算两者而不是单独计算会更快。

在肤浅的浏览中,我看不到 asincosininitInterTab2D但我希望有一些东西被内联。

在四处闲逛时,我尝试了:

cd /Applications/Xcode.app/Contents/Developer/Platforms 
grep -lr ___sincos_stret *

通过它并使用nm可能的结果,我发现该___sincos_stret功能在 iOS 7.0 和 OS X 10.9 中作为其libsystem_m.dylibs 的一部分公开。例如,如果您的 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 中执行等效的操作。

于 2013-09-26T00:19:44.837 回答
6

您想要-mmacosx-version-min=10.8(或任何您的目标操作系统版本)。

于 2013-09-26T21:29:42.113 回答
3

似乎卸载并重新安装 Xcode5 DP 和 OSX 10.9 命令行工具解决了这个问题。我想从以前的版本更新有问题。

于 2013-09-28T03:06:44.977 回答
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
于 2013-10-05T21:16:14.503 回答