【问题标题】:Apple Mach-O Linker Warnings and ErrorsApple Mach-O 链接器警告和错误
【发布时间】:2012-04-26 18:14:33
【问题描述】:

查看这张来自 xcode 的图片:

这些似乎与我在名为 Global.h 的文件中定义的全局变量有关

但我认为 Global.h 没有任何问题,为什么会出现这些错误?

这是构建日志:

Ld /Users/zak/Library/Developer/Xcode/DerivedData/Kidsfridge-    amcsbtrvmfjdgoapuiabisqnzsze/Build/Intermediates/ArchiveIntermediates/Kidsfridge/IntermediateB    uildFilesPath/Kidsfridge.build/Adhoc-iphoneos/Kidsfridge.build/Objects-    normal/armv7/Kidsfridge normal armv7  
    cd "/Users/zak/Downloads/Kidsfridge20120302_1 2/Kidsfridge"  
    setenv IPHONEOS_DEPLOYMENT_TARGET 4.2  
    setenv PATH       "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin:/App    lications/Xcode.app/Contents/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin"  
    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -    arch armv7 -isysroot          /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS    5.1.sdk -L/Users/zak/Library/Developer/Xcode/DerivedData/Kidsfridge-    amcsbtrvmfjdgoapuiabisqnzsze/Build/Intermediates/ArchiveIntermediates/Kidsfridge/BuildProductsPath/Adhoc-iphoneos "-L/Users/zak/Downloads/Kidsfridge20120302_1     2/Kidsfridge/Twitter/Twitter+OAuth/Libraries & Headers" -  F/Users/zak/Library/Developer/Xcode/DerivedData/Kidsfridge-  amcsbtrvmfjdgoapuiabisqnzsze/Build/Intermediates/ArchiveIntermediates/Kidsfridge/BuildProductsPath/Adhoc-iphoneos -filelist /Users/zak/Library/Developer/Xcode/DerivedData/Kidsfridge-amcsbtrvmfjdgoapuiabisqnzsze/Build/Intermediates/ArchiveIntermediates/Kidsfridge/IntermediateBuildFilesPath/Kidsfridge.build/Adhoc-iphoneos/Kidsfridge.build/Objects-normal/armv7/Kidsfridge.LinkFileList -dead_strip -miphoneos-version-min=4.2 -framework CoreLocation -framework CoreMedia -framework AssetsLibrary -framework ImageIO -framework MobileCoreServices -framework CFNetwork -lz -lxml2 -framework Foundation -framework UIKit -framework CoreGraphics -framework QuartzCore -framework MessageUI -framework SystemConfiguration -framework Security -lsqlite3 -lOAuth -o /Users/zak/Library/Developer/Xcode/DerivedData/Kidsfridge-amcsbtrvmfjdgoapuiabisqnzsze/Build/Intermediates/ArchiveIntermediates/Kidsfridge/IntermediateBuildFilesPath/Kidsfridge.build/Adhoc-iphoneos/Kidsfridge.build/Objects-normal/armv7/Kidsfridge



ld: warning: alignment lost in merging tentative definition _isAlreadyAdded  
ld: warning: alignment lost in merging tentative definition _isSearching
Undefined symbols for architecture armv7:  
  "_isFavorite", referenced from:  
      -[ArtworkViewController tableView:didSelectRowAtIndexPath:] in ArtworkViewController.o  
      -[ArtworkThumbNailView reloadScrollView] in ArtworkThumbNailView.o  
      -[ArtworkThumbNailView LoadData] in ArtworkThumbNailView.o  
      -[ArtworkThumbNailView viewDidLoad] in ArtworkThumbNailView.o  
      -[ArtworkImageViewController LoadFullImageArray] in ArtworkImageViewController.o  
      -[ArtworkImageViewController viewWillAppear:] in ArtworkImageViewController.o  
      -[ArtworkImageViewController viewDidLoad] in ArtworkImageViewController.o  
      ...  
ld: symbol(s) not found for architecture armv7  
clang: error: linker command failed with exit code 1 (use -v to see invocation)

【问题讨论】:

  • 尝试发布构建日志,而不是 Xcode 错误表。
  • 我发布了构建日志,这个 post 没有回答问题(解决方案不起作用)加上它的另一个问题,因为我的问题是警告和错误。
  • this 的问题怎么样?答案肯定更丰富。
  • 您发布的问题以及我标记为骗子的问题实际上具有相同的根源,我非常怀疑您是否遵循了该已接受答案给出的提示。我敢打赌,您只需包含一个标题,该标题在多个源中定义和声明一些全局变量(无论如何都是不好的样式),并且由于明显的原因这是不可能的。要解决这个问题,您必须使用 extern 关键字在该标头中声明并在 implementation (m) -file 中定义。

标签: objective-c ios xcode


【解决方案1】:

我用附加到我的 appDelegate 的属性替换了全局变量,错误就消失了。

【讨论】:

  • +1 - 我从声明的 extern 全局变量更改为 @property 以解决此错误。
【解决方案2】:

我注意到只有 global.h 文件中的布尔值产生了这个警告,(global.h 文件导入到所有 .m 文件中)

我将 BOOL 更改为 int,所有警告都消失了。

【讨论】:

    猜你喜欢
    • 2011-12-06
    • 1970-01-01
    • 1970-01-01
    • 2014-04-06
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多