iOS xcconfig 中的链接库

iOS Linking library in xcconfig

我正在建图书馆。我希望它编译并包含另一个文件(即 googleConversion),但我需要使用 xcconfig 文件来完成(因为对于某些构建,我不想包含库)

以下:Link binary with static library in xcconfig

所以我所做的就是在我的 xcconfig 文件中添加:

LIBRARY_SEARCH_PATHS = $(inherited) $(PROJECT_DIR)/../Vendors/Analytics/GoogleConversion/GoogleConversionTrackingSDK-iOS-3.2.0 
OTHER_LDFLAGS =$(inherited) -ObjC -L$(PROJECT_DIR)/../Vendors/Analytics/GoogleConversion/GoogleConversionTrackingSDK-iOS-3.2.0 -lGoogleConversionTracking

这让我可以在没有警告的情况下进行编译,但不要在我的 .a 中包含该库

我设法做到的唯一方法是在 Link Binary With Library 中的构建阶段添加库。

但如果我希望能够自动化我的不同类型的构建,这不是我能做的事情

听起来应该很简单;(

也许其他一些配置阻止了这些线路的工作?

我尝试检查我的日志,我可以在 Libtool 导出路径中的 "check dependencies" 中看到我可以看到我的 OTHER_LDFLAGS 的解析路径(当我从我的 xcconfig 中删除它时它消失了)但是不是 -lGoogleConversionTracking,它在我将我的库置于构建阶段时存在。

(我发生了更多事情,比如如果我从构建阶段完全删除面板,libtool 中什么都没有,但这在某种程度上可能是有意义的,而且没什么大不了的)

提前致谢!

在我的例子中它看起来像:

LIBRARY_SEARCH_PATHS = $(inherited) "${SRCROOT}/thirdparties/CardIO-5.1.0"
OTHER_LDFLAGS = $(inherited) -ObjC -lz -lc++ -lCardIO

但我的库放在源文件夹中,与 *.xcodeproj 文件处于同一级别。

我认为带有 "\..\" 的路径不适用于 xcode。

这个问题可以通过您方案中的脚本阶段来解决。

  • 通过 Product->Scheme->Manage Schemes 打开您的方案。
  • Build->Pre-actions
  • 中添加New run script action
  • 脚本应该将文件 libGoogleConversionTracking.a 复制到 ${SRCROOT}
  • *.xcconfig 文件中的 LIBRARY_SEARCH_PATHS 设置新路径

终于明白了!!!!

这是因为一个旧的 xcode 错误已在 xcode 6 中解决。

https://tarunsharmaios.wordpress.com/2014/09/12/xcode6-static-library-linking-broken/

BlockquoteXcode will no longer pass options in the build setting OTHER_LDFLAGS to libtool when building static libraries, nor will it pass options in OTHER_LIBTOOLFLAGS to the Mach-O linker when building any other kind of product. Previously all options in both settings would be passed to both tools. Make sure that options are in the correct build setting for the product type, static library, or other component being built. (4285249)