【问题标题】:Undefined symbols for architecture i386 Upgrading project to iOS 5架构 i386 的未定义符号将项目升级到 iOS 5
【发布时间】:2011-12-18 11:38:11
【问题描述】:

我一直在搜索 SO 和 Google,但还没有发现任何有用的东西。

我们正在更新现有的 iOS 项目以针对 iOS 5 构建。

我们的项目有两个目标,第一个是我们的静态库,第二个是单元测试应用程序 (GHUnit)。

在构建单元测试目标时,它成功编译了静态库,但随后无法链接它并显示以下输出:

Ld /Users/XXXXXX/Library/Developer/Xcode/DerivedData/XXXXXXLibrary-egoqfplddstqvwaigwuiqfqplcax/Build/Products/Debug-iphonesimulator/UnitTests.app/UnitTests normal i386
    cd /Users/XXXXXX/Documents/iOS/trunk
    setenv MACOSX_DEPLOYMENT_TARGET 10.6
    setenv PATH "/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin:/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin"
    /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/clang -arch i386 -isysroot /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.0.sdk -L/Users/XXXXXX/Library/Developer/Xcode/DerivedData/XXXXXXLibrary-egoqfplddstqvwaigwuiqfqplcax/Build/Products/Debug-iphonesimulator -F/Users/XXXXXX/Library/Developer/Xcode/DerivedData/XXXXXXLibrary-egoqfplddstqvwaigwuiqfqplcax/Build/Products/Debug-iphonesimulator -F/Users/XXXXXX/Documents/iOS/trunk -F/Users/XXXXXX/Documents/iOS/trunk/UnitTests -filelist /Users/XXXXXX/Library/Developer/Xcode/DerivedData/XXXXXXLibrary-egoqfplddstqvwaigwuiqfqplcax/Build/Intermediates/XXXXXXLibrary.build/Debug-iphonesimulator/UnitTests.build/Objects-normal/i386/UnitTests.LinkFileList -mmacosx-version-min=10.6 -Xlinker -objc_abi_version -Xlinker 2 -ObjC -all_load -Wl -Xlinker -no_implicit_dylibs -D__IPHONE_OS_VERSION_MIN_REQUIRED=50000 -framework SystemConfiguration -framework CoreLocation -framework CoreData /Users/XXXXXX/Library/Developer/Xcode/DerivedData/XXXXXXLibrary-egoqfplddstqvwaigwuiqfqplcax/Build/Products/Debug-iphonesimulator/XXXXXX.a -framework GHUnitIOS -framework CoreGraphics -framework Foundation -framework UIKit -o /Users/XXXXXX/Library/Developer/Xcode/DerivedData/XXXXXXLibrary-egoqfplddstqvwaigwuiqfqplcax/Build/Products/Debug-iphonesimulator/UnitTests.app/UnitTests

    Undefined symbols for architecture i386:
      "_llvm_gcda_start_file", referenced from:
          ___llvm_gcov_writeout in XXXXXX.a(NSObject+SBJSON.o)
          ___llvm_gcov_writeout in XXXXXX.a(NSString+SBJSON.o)
          ___llvm_gcov_writeout in XXXXXX.a(SBJsonBase.o)
          ___llvm_gcov_writeout in XXXXXX.a(SBJsonParser.o)
          ___llvm_gcov_writeout in XXXXXX.a(SBJsonWriter.o)
          ___llvm_gcov_writeout in XXXXXX.a(XXXXXXReachability.o)
          ___llvm_gcov_writeout in XXXXXX.a(XXXXXX.o)
          ...
      "_llvm_gcda_emit_function", referenced from:
          ___llvm_gcov_writeout in XXXXXX.a(NSObject+SBJSON.o)
          ___llvm_gcov_writeout in XXXXXX.a(NSString+SBJSON.o)
          ___llvm_gcov_writeout in XXXXXX.a(SBJsonBase.o)
          ___llvm_gcov_writeout in XXXXXX.a(SBJsonParser.o)
          ___llvm_gcov_writeout in XXXXXX.a(SBJsonWriter.o)
          ___llvm_gcov_writeout in XXXXXX.a(XXXXXXReachability.o)
          ___llvm_gcov_writeout in XXXXXX.a(XXXXXX.o)
          ...
      "_llvm_gcda_emit_arcs", referenced from:
          ___llvm_gcov_writeout in XXXXXX.a(NSObject+SBJSON.o)
          ___llvm_gcov_writeout in XXXXXX.a(NSString+SBJSON.o)
          ___llvm_gcov_writeout in XXXXXX.a(SBJsonBase.o)
          ___llvm_gcov_writeout in XXXXXX.a(SBJsonParser.o)
          ___llvm_gcov_writeout in XXXXXX.a(SBJsonWriter.o)
          ___llvm_gcov_writeout in XXXXXX.a(XXXXXXReachability.o)
          ___llvm_gcov_writeout in XXXXXX.a(XXXXXX.o)
          ...
      "_llvm_gcda_end_file", referenced from:
          ___llvm_gcov_writeout in XXXXXX.a(NSObject+SBJSON.o)
          ___llvm_gcov_writeout in XXXXXX.a(NSString+SBJSON.o)
          ___llvm_gcov_writeout in XXXXXX.a(SBJsonBase.o)
          ___llvm_gcov_writeout in XXXXXX.a(SBJsonParser.o)
          ___llvm_gcov_writeout in XXXXXX.a(SBJsonWriter.o)
          ___llvm_gcov_writeout in XXXXXX.a(XXXXXXReachability.o)
          ___llvm_gcov_writeout in XXXXXX.a(XXXXXX.o)
          ...
      "_llvm_gcda_increment_indirect_counter", referenced from:
          -[SBJsonParser scanValue:] in XXXXXX.a(SBJsonParser.o)
          -[SBJsonParser scanRestOfString:] in XXXXXX.a(SBJsonParser.o)
          -[SBJsonWriter appendString:into:] in XXXXXX.a(SBJsonWriter.o)
          -[XXXXXX loginSuccessfulCallback:XXXXXXHttpResult:] in XXXXXX.a(XXXXXX.o)
          +[XXXXXXDataTank sharedDataTankManager] in XXXXXX.a(XXXXXXDataTank.o)
          -[XXXXXXDataTank processFiveHundredSeriesHttpResult:] in XXXXXX.a(XXXXXXDataTank.o)
          -[XXXXXXDataTank networkActive] in XXXXXX.a(XXXXXXDataTank.o)
          ...
    ld: symbol(s) not found for architecture i386
    clang: error: linker command failed with exit code 1 (use -v to see invocation)

我已经尝试搜索未找到的符号,但谷歌确实有 0 个结果。

我假设静态库是用单元测试目标不是的东西构建的,但我找不到它。

有人有什么建议吗?

干杯

【问题讨论】:

  • 当框架不可用时通常会出现此错误。这里我不确定缺少哪个框架,但也许您可以尝试找出缺少的框架。

标签: iphone ios ios5


【解决方案1】:

这对我很有效(用粗体捕捉设置):

【讨论】:

  • “仪器程序流程”是我的问题!谢谢!
  • 是的,就我而言,它修复了Google Analytics iOS SDK 3.x 问题。
  • 谢谢!还需要“仪器程序流程”
【解决方案2】:

如果您不需要代码覆盖,您可以使用以下设置完全禁用它,从而避免尝试调用这些函数。

GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO
GCC_GENERATE_TEST_COVERAGE_FILES = NO

【讨论】:

  • 这是对我的修复。我曾经(不成功地)设置了 gcov,然后神秘地出现了这个问题。
  • 如果禁用此功能,则可能需要重新编译库。
【解决方案3】:

llvm_gcda_start_file 和 co 由 LLVM 编译器添加,用于代码覆盖和单元测试。

在项目设置中将 -lprofile_rt 添加到链接器标志应该可以解决此错误。 (较早的教程可能会建议 -lgcov 用于 Xcode 3 和 GCC)

根据Code Coverage on Xcode 4.4.1,不再需要“-lprofile_rt”。

【讨论】:

  • 我遇到了同样的问题并将 -lprofile_rt 添加到链接器标志,但是导致了这个错误:library not found for -lprofile_rt
  • 没有尝试使用 Xcode 4.3beta,但这在我的 4.2 中确实有效,只需尝试:1)检查它们是否存在:/usr/lib/libprofile_rt.a /usr/lib/libprofile_rt.dylib /Developer/Platforms/iPhoneOS.platform/Developer/usr/lib/libprofile_rt.a /Developer/Platforms/iPhoneOS.platform/Developer/usr/lib/libprofile_rt.dylib2)检查您的项目设置是否具有正确的路径等...
【解决方案4】:

就我而言,我正在为设备构建。切换到模拟器就像魅力一样,但我不知道为什么它会有所不同。 :-)

【讨论】:

    【解决方案5】:

    就我而言,我必须将--coverage 添加到CMAKE_EXE_LINKER_FLAGS 在 Apple Clang Apple LLVM version 9.0.0 (clang-900.0.39.2) 上。这似乎已经解决了它。 以上解决方案均无效。

    下面的文章提到了它:

    https://asmaloney.com/2017/01/code/code-coverage-of-unit-tests-using-qt-5-on-macos/

    【讨论】:

      【解决方案6】:

      我有同样的错误:只需将“libGoogleAnalyticsServices.a”添加到您的文件中

      【讨论】:

      • Google Analytics 与 LLVM 和 gcov 有什么关系?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-08
      • 1970-01-01
      • 2012-02-09
      • 1970-01-01
      • 2011-08-14
      相关资源
      最近更新 更多