___sincos_stret链接时未定义的符号

问题描述:

像以前提到的here,___sincos_stret在使用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

请写一个自包含的问题不参照其他的线程。 – lpapp

+1

@LaszloPapp它似乎是Xcode5的一个普遍问题,我不知道如何让这个问题更加自我包含,除了将其他线程的答案粘贴到其中。 – Appleshell

+0

请复制并粘贴,但只有严格相关的部分。 – lpapp

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

+1

为什么这个答案被接受?这是不正确的...... – trojanfoe

+0

@trojanfoe因为这是什么修复了这个问题。 – Appleshell

+0

请你能详细解释一下你如何“卸载”Xcode和CL工具?你是否简单地删除了Xcode并重新安装它,还是你必须做其他事情? – Chris

stret是苹果公司发言的“返回结构”。 ___sincos_stret是一个LLVM优化 - 如果您编写的代码调用sin(n),然后cos(n)并使用这两个结果,则编译器将对结构返回的sincos方法进行一次调用,从而接收包含这两种结果的结构。如果操作数是相同的,那么一次完成而不是单独完成要更快。

在肤浅的浏览中,我看不到中的sincos,但我预计内容中会有内容。

虽然闲逛我想:

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

通过这一点,就可能导致使用nm,我发现___sincos_stret功能在两个iOS版,因为7.0和OS X自10.9暴露自己libsystem_m.dylib S的一部分。例如。如果你的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中执行相同的操作。

+0

我很确定我为OSX构建。我使用项目中的cmake文件并使用make编译项目。我将添加问题中的一个错误。 – Appleshell

+1

'__sincos_stret'符号由OS X上的'/ usr/lib/system/libsystem_m.dylib'提供,就像iOS一样。提问者的问题是编译器在一个或多个目标文件中生成符号,因为在编译步骤中没有指定目标操作系统版本(所以它默认为主机系统版本),但链接步骤指定的操作系统版本

+0

@StephenCanon 10.9是目前在NDA下的beta版本,对不对?所以我没有找到这个符号,因为我没有beta SDK,但它已经被编译器替代了,因为很多其他人都这样做了? – Tommy

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

+1

这似乎是有道理的,但即使我在每个cmake命令中将参数添加到CXXFLAGS,错误仍然存​​在。做错了,虽然 - [这是我目前做这个案子的程序](http://pastebin.com/J7qmNegN)(目前无法与其他项目一起测试) – Appleshell

+0

您是否尝试过使用基于curses的界面'ccmake' ? – Gerard

+1

当使用旧版OS X SDK连接到ICU时,刚刚遇到了这个问题,在CPPFLAGS **中设置了'-isysroot'和'-mmacosx-version-min', *'LDFLAGS'。 – Eric3

在文本编辑器 /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