0

我在 Xcode 5 中链接到静态库时遇到问题。我确实阅读了 Pro iOS 5 Tools 中关于构建和使用静态库的章节。在创建静态库后它告诉我要做的是在 Build Phases 选项卡中链接到框架。那部分非常简单。然后它在“标题搜索路径”下的“构建设置”中添加:

$(BUILT_PRODUCTS_DIR) 

然后为了使用我的静态库,我只是像这样导入它:

#import "ConversionCalculator/ConversionCalculator.h"

所以这一直工作到昨天。我尝试在我的项目中添加一个新的静态库,但它似乎不起作用。所以我清理了我的项目,并尝试再次重建,但现在 Xcode 抱怨#import "ConversionCalculator/ConversionCalculator.h". 它说

词法或预处理器问题。找不到“ConversionCalculator/ConversionCalculator.h”文件。

我想知道是否有人对调试有任何提示。我浏览了不同的教程,如下所示:http: //blog.stevex.net/2012/04/static-libraries-in-xcode/ http://cocoamanifest.net/articles/2011/06/library-management- with-xcode-workspaces.html http://www.raywenderlich.com/41377/creating-a-status-library-in-ios-tutorial

但我似乎找不到链接到静态库的“黄金方式”,或者如何解决 Xcode 找不到我的文件的原因。我的文件结构是在我的机器上设置的,如下所示:

Projects\
   DistanceCalculator\DistanceCalculator.xcodeproj
   ConversionCalculator\ConversionCalculator.xcodeproj
   DistanceCalculator.workspace

就像我说的那样,当我按照 Pro iOS 5 Tools 书中的教程进行操作时,这一切都过去了。现在我不知道为什么我的工作区以前使用过 ConversionCalculator 时找不到它。我发现困难的部分是不同的文章对标题搜索路径有不同的说法,我不确定填充该字段的最佳方法是什么。有什么想法吗?提前致谢!

编辑:我会补充一点,我可以为设备构建而不会出错。但是当我切换到 iPhone 模拟器时,它给了我关于无法找到文件的错误。我还看到我收到此警告:

ConversionCalculator was rejected as an implicit dependency for 'libConversionCalculator.a' because its architectures 'i386' didn't contain all required architectures 'i386 x86_64'

看着那个,我不确定那是什么意思。如果这意味着我的库不是为所有架构构建的,我只是尝试根据上面链接中的 wenderlich 文章创建一个为所有架构构建的目标。这似乎起作用,因为当我转到 dervieddata 文件夹时,我看到了调试、发布和通用,我看到了 libConversionCalculator.a 文件。但是当我回到工作区并尝试为模拟器重建项目时,我得到了找不到文件错误和隐式警告。

编辑#2:我刚刚在 Xcode 上看到一个警告标志,上面写着升级到推荐的构建设置。现在我没有错误。不知道发生了什么......但我想没有错误是好的。

4

1 回答 1

1

我会按照 Xcode 的帮助主题“链接到您的库”中提供的描述,在 iOS 中使用静态库简介中的配置您的应用程序一章 (您也可以在 Xcode 帮助中搜索)。

除了我建议您始终使用尖括号从库中包含您的标题:

#import <ConversionCalculator/ConversionCalculator.h>

使用双引号可能会无意中在相对于写入此导入指令的文件的某个子文件夹中搜索和查找具有相同名称的文件。只有在任何子文件夹中没有文件后,预处理器才会开始使用指定的标题搜索路径进行搜索。

使用尖括号,预处理器立即仅在指定的标头搜索路径进行搜索。

因此,由于您实际上想要查找相应库的标头,因此请始终使用尖括号。

注意:如果您按照建议创建静态库项目,则无需在目标中显式设置与库链接的标头搜索路径:Xcode 已经添加了搜索路径:

$(BUILT_PRODUCTS_DIR)/includes

您的库标题位于

$(BUILT_PRODUCTS_DIR)/includes/<product-name>

它们通过 iOS 静态库目标的“复制文件”阶段放置在那里,其“目标”设置为“产品目录”,其“子路径”默认设置为“includes/${PRODUCT_NAME}”。

您可以将这些默认设置更改为其他合理合理的值。(如果您这样做,请考虑 Xcode 的默认搜索路径的后果!)

于 2013-09-23T08:45:27.247 回答