更新到Xcode 6后:架构armv7的未定义符号:"___gnu_f2h_ieee"

7

我已经试了好几个小时都找不到问题所在。自从我更新至 Xcode 6 后,在 ioS 8.0 和 7.1 上都遇到了以下错误:

Undefined symbols for architecture armv7:
  "___gnu_f2h_ieee", referenced from:
      _playbackCallback in Audio.o
ld: symbol(s) not found for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)

感谢您的帮助。
编辑(完整构建日志错误):
Ld /Users/rjc/Library/Developer/Xcode/DerivedData/Acc-hjhfomxkmwbyxwbfzjbduabbhlcc/Build/Products/Debug-iphoneos/Acc.app/Acc normal armv7
cd /Users/rjc/Desktop/apps/Acc
export IPHONEOS_DEPLOYMENT_TARGET=7.1
export PATH="/Applications/Xcode6-Beta2.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin:/Applications/Xcode6-Beta2.app/Contents/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin"
/Applications/Xcode6-Beta2.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -arch armv7 -isysroot /Applications/Xcode6-Beta2.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.0.sdk -L/Users/rjc/Library/Developer/Xcode/DerivedData/Acc-hjhfomxkmwbyxwbfzjbduabbhlcc/Build/Products/Debug-iphoneos -L/Users/rjc/Desktop/apps/Acc/Acc -F/Users/rjc/Library/Developer/Xcode/DerivedData/Acc-hjhfomxkmwbyxwbfzjbduabbhlcc/Build/Products/Debug-iphoneos -F/Users/rjc/Desktop/apps/Acc -filelist /Users/rjc/Library/Developer/Xcode/DerivedData/Acc-hjhfomxkmwbyxwbfzjbduabbhlcc/Build/Intermediates/Acc.build/Debug-iphoneos/Acc.build/Objects-normal/armv7/Acc.LinkFileList -dead_strip -ObjC -all_load -fobjc-arc -fobjc-link-runtime -miphoneos-version-min=7.1 -lCorePlot-CocoaTouch -framework CoreTelephony -framework MediaPlayer -framework MessageUI -framework Social -framework Accelerate -framework CoreLocation -framework MobileCoreServices -framework AVFoundation -framework AudioToolbox -framework CoreAudio -framework QuartzCore -framework UIKit -framework Foundation -framework CoreGraphics -framework CoreData -Xlinker -dependency_info -Xlinker /Users/rjc/Library/Developer/Xcode/DerivedData/Acc-hjhfomxkmwbyxwbfzjbduabbhlcc/Build/Intermediates/Acc.build/Debug-iphoneos/Acc.build/Objects-normal/armv7/Acc_dependency_info.dat -o /Users/rjc/Library/Developer/Xcode/DerivedData/Acc-hjhfomxkmwbyxwbfzjbduabbhlcc/Build/Products/Debug-iphoneos/Acc.app/Acc

请问您能否粘贴整个错误日志? - Ricky
@Ricky,抱歉回复晚了。我已经编辑了我的问题。谢谢! - jcr
2个回答

2
我也遇到了一个非常类似的问题,并找到了这个链接。它解决了我的问题,对我很有帮助。 http://helpdesk.metaio.com/questions/35905/undefined-symbols-for-architecture-i386-xcode-6-ios-8-beta-6/36538 创建一个 .c 文件(文件名不重要,在我的情况下我创建了 i386Symbols.c),然后将其添加到项目中。接着复制以下内容。
//  i386Symbols.c
//  Your project
//
//  Created by Ludwig on 10/2/14.
//  Copyright (c) 2014. All rights reserved.
//

#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>

FILE *fopen$UNIX2003( const char *filename, const char *mode )
{
    return fopen(filename, mode);
}

int fputs$UNIX2003(const char *res1, FILE *res2){
    return fputs(res1,res2);
}

int nanosleep$UNIX2003(int val){
    return usleep(val);
}

char* strerror$UNIX2003(int errornum){
    return strerror(errornum);
}

double strtod$UNIX2003(const char *nptr, char **endptr){
    return strtod(nptr, endptr);
}

size_t fwrite$UNIX2003( const void *a, size_t b, size_t c, FILE *d )
{
    return fwrite(a, b, c, d);
}

1

我无法解决这个问题,但我有一个部分解决方法。
似乎许多浮点函数没有 armv7 切片。我认为它们将在 Xcode 6 的以后版本(或最终版本)中包含。

相反地,在 armv7s 中存在切片:由于我正在iPhone5上调试,该手机使用后者的指令集,我只需从构建设置中删除架构。

  1. 进入项目设置,选择您的项目。
  2. 构建设置 下查找 架构 条目。
  3. 编辑它,删除 $(ARCHS_STANDARD) 并替换为 armv7s
  4. 如 jcr 所示,您可能需要将 Active Architecture Only 选项从 YES 更改为 NO

这将允许进行构建和运行。不幸的是,我没有 arm64 设备进行测试,但也许这个切片也被包括在内。


抱歉,我正在编辑我的答案。我将“仅激活架构”选项从“是”改为“否”,现在它可以工作了。太好了!谢谢。 - jcr
因为iPhone 4S使用的正是缺失的“armv7”架构。在这种情况下,我认为唯一的选择就是等待更新并提交错误报告。 - Pietro Saccardi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接