Xcode 4中的静态库

(我的问题已经在这里问过,但没有任何可以看到的工作答案,例如Xcode4工作区和静态库项目和应用程序项目 )

我正在尝试使用第三方提供的库。 他们提供了构buildlibLibraryName.a文件的XCode项目。 他们build议将项目添加为我自己的子项目,然后将产品libLibraryName.a文件添加到我的项目设置“链接二进制库”中描述的库集。

库的构build正确:生成.a文件。 但是项目在Products组下面显示一个红色的libLibraryName.a文件。 我不能让它变黑。 父项目说它不能find用于链接的库名。

作为一个testing,我使用XCode 4静态库模板创build了一个新的静态库项目。 这个项目performance出同样的行为 – 即使构build.a文件,产品也不会显示“黑色”。 ( 编辑:如果你为设备而不是模拟器,它会变黑。

我知道XCode 4默认将中间文件和产品文件放在共享位置。 我试过这个设置,并且改变了设置,把产品文件放在构build设置中描述的文件夹中。 两个设置都不起作用。

人们也build议build立一个设备而不是模拟器。 我试过这个无济于事。

是什么赋予了? 我如何获得静态库项目来识别产品的构build位置,然后在另一个项目中引用此产品?

很多箍跳,但现在我的笔记,我得到它的工作。

  • 如果您创build一个新的股票XCode4 iOS“cocoa触摸静态库”项目(并添加一些代码),项目将开箱即用。 但是,产品文件libLibraryName.a只有在您执行设备构build时才会变为黑色(表示文件不存在)。 模拟器构build并不显示目标实际上是build立的。

  • 在项目目标构build设置中,“每个configuration构build产品path”默认为$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)如果您将其更改为其他项目(或者您已将项目从XCode3.x它使用$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)$(IPHONEOS_DEPLOYMENT_TARGET)作为默认值,我相信),那么产品文件libLibraryName.a永远不会变黑。 对我来说,这说在XCode的地方有一个错误。

  • 我可以在没有产品文件变成黑色后生活(这是一个很好的指标,但嘿,无论如何)。但我确实需要我的消费项目,以便能够find正确的版本库,无论是模拟器或设备。 在一个理想的世界里会有一个带有i386 / arm6 / arm7位的.a文件,但是这又不是我的库/库项目。

  • XCode4过渡指南是向我展示了光明。 它规定创build一个承载两个项目的工作空间,并且都将构build到相同的共享构build目录中。 我之前没有使用工作区,因此我使用“ 文件/另存为工作区”命令来创build新的工作区文件。 然后,我添加了图书馆项目,注意确保它作为我的主要项目而不是孩子的同行。

  • 我必须确保工作区被configuration为将生成输出放置到一个公共文件夹中。 在“工作区设置”对话框中,将“构build位置”设置设置为“将构build产品放置在派生数据位置”

  • 我还必须确保在“pipe理scheme”对话框中检查每个项目的“共享”checkbox。

  • 最后,为了指定我的主项目的库依赖项,我只需进入目标Build Phases选项卡,Link Binaries with Libraries部分,然后单击'+',然后从Workspace文件夹下selectlibLibraryName.a文件。 请注意,我以前没有工作区,没有常见的生成目录,结果是XCode在链接期间找不到.a文件。

所有的说和做,它就像一个魅力。 我不禁认为应该会更容易 – 因为我相信它是在XCode3中。

我很乐意阅读其他任何人的经验,或者关于其他(简单的)方法来使链接静态库运行良好的任何反馈。

看看我的答案在这里,看看是否可以帮助你:

将静态库链接到XCode 4中的iOS项目

这些是基于我对我自己的图书馆的指示。 我认为你原来的过程中缺less的一步是,你不要将静态库添加到你的应用程序项目中作为目标依赖项(在我的指令中的步骤3),同时在“链接二进制库”中链接它。 您也可能需要执行第5步,具体取决于静态库项目如何链接标题。

当我用我自己的应用程序进行这个过程时,我们的应用程序对静态库项目具有跨项目引用,实际上它比Xcode 3中的等效过程less一步。

看看我的解决scheme笔记和打开雷达条目 。

红色的产品节点是Xcode的一个bug。 您可以通过更改项目构build设置上的SDKROOT来使其工作。 目标版本设置不适用于IDE显示和支持。

编辑

供以后参考。

目前,我的意见是更改为Xcode 项目并不完全能够处理多个平台。 虽然它可以显示多个平台,但是一次只能select一个平台来通过SDKROOT设置来屏幕显示。 如果您selectiOS ,它将使用类似Debug-iphoneos东西来构build产品path。 所以所有的Mac OS X目标都会丢失。 如果您selectMac OS X ,它将使用像Debug 。 所以所有iOS目标的产品都将会丢失。

我觉得Xcode还有内部的错误。 很长时间才能使Xcode稳定下来。

我和我的团队有同样的问题。 其中一个开发人员遇到了这个问题,但是我的xcode能够正确地编译和find头文件。 顺便说一句:所有“build立设置”已正确configuration(总是search用户path,用户头path等)。

我意识到他的项目是在一个path中有空格的目录(../my project / blah.xcodeproj)。 改变这一点,Xcode能够在同一个工作区内find来自静态库的头文件。

只要知道目录名称。 我的两分钱

一个澄清的细节(在开始构build输出之前,直到我开始注视):如果你发现你的库头被导出到Build/Products/Debug并且你的父项目正在Build/Products/Debug-iphonesimulator ,您的库正在为OS X而不是iOS构build。 您可以在项目设置的“体系结构”部分的“支持的平台”设置中对此进行更改。 如果创build一个vanilla C ++静态lib项目,OS X似乎是默认设置,所以这种情况很容易遇到。

我的一个图书馆遇到了这个问题。 我其实还有另外4个库,包括那些看起来很好的,看起来很黑的,但没有的。 我的红色库是通过更改库项目的“生成设置”中的基础SDK来解决的。 由于该库可以为Mac OS X和iOS构build,因此将其设置为Mac OS X设置。 iOS目标库仍然build成,但从未变黑。 一旦我将Base SDK版本设置更改为最新的iOS,我的库就变成了黑色。