目标 ... 覆盖在 `Pods/Pods.xcconfig 中定义的 `OTHER_LDFLAGS` 构建设置

Posted

技术标签:

【中文标题】目标 ... 覆盖在 `Pods/Pods.xcconfig 中定义的 `OTHER_LDFLAGS` 构建设置【英文标题】:The target ... overrides the `OTHER_LDFLAGS` build setting defined in `Pods/Pods.xcconfig 【发布时间】:2013-08-24 22:42:09 【问题描述】:

我已将SpatialIite 合并到一个Xcode 项目中,该项目使用来自Proj.4 的头文件,只有一个头文件。两者都是 Xcode 项目并具有静态目标。

我正在尝试从 git 子模块迁移到 Cocoapods。由于静态目标似乎很难与 Cocoapods 一起使用,我只想以通常的方式构建项目。我为Proj.4 制作了 podspec。在为SpatialLite 编写 podfile 后,我收到了警告:

[!] The target `Spatialiteios [Debug]` overrides the `OTHER_LDFLAGS` build setting defined in `Pods/Pods.xcconfig'.
    - Use the `$(inherited)` flag, or
    - Remove the build settings from the target.

[!] The target `SpatialiteIOS [Debug]` overrides the `HEADER_SEARCH_PATHS` build setting defined in `Pods/Pods.xcconfig'.
    - Use the `$(inherited)` flag, or
    - Remove the build settings from the target.

[!] The target `SpatialiteIOS [Debug - Release]` overrides the `OTHER_LDFLAGS` build setting defined in `Pods/Pods.xcconfig'.
    - Use the `$(inherited)` flag, or
    - Remove the build settings from the target.

[!] The target `SpatialiteIOS [Debug - Release]` overrides the `HEADER_SEARCH_PATHS` build setting defined in `Pods/Pods.xcconfig'.
    - Use the `$(inherited)` flag, or
    - Remove the build settings from the target.

我阅读了this issue,但我对警告的含义以及我能做些什么来解决它一无所知。

另外一个问题,当我打开工作区以及单独打开 SpatiaLite 项目时,两者都针对 Mac OSX 64,而假设它是一个 iOS 项目。我的 podfile 确实说“平台:ios”。

【问题讨论】:

2020 - 适合任何为这个烦人的问题而苦苦挣扎的人。它真的只是由(惊喜!:))facebook引起的。正如这里所解释的,firebase.google.com/docs/auth/ios/firebaseui “如果你愿意,你可以只添加 Auth 组件和你想使用的提供者......” 一旦你消除了 facebook 选项,就没有问题了。 :// 【参考方案1】:

这在大多数情况下肯定有效:

转到您的目标构建设置 -> 其他链接器标志 -> 双击 .将$(inherited) 添加到新行。

如果您对“...目标覆盖...中定义的 GCC_PREPROCESSOR_DEFINITIONS 构建设置”有问题,那么您必须将 $(inherited) 添加到您的目标构建设置 -> 预处理器宏

【讨论】:

我会扩展这个答案。如果您对“... target overrides the GCC_PREPROCESSOR_DEFINITIONS build setting defined in ...”有疑问,那么您必须将 $(inherited) 添加到您的目标 Build Settings -> Preprocessor Macros 我怀疑“...目标覆盖了 INSERT_YOUR_MISSING_DEFINITION...”,那么您必须将 $(inherited) 添加到它。奇怪的是,我的 xcode 默认显示 $(inherited) 有点微弱。我编辑并简单地重新输入了相同的内容。错误消失了.. @joe 仍然不适合我。我尝试了所有这些建议,但是当我重新运行 pod install 时,错误仍然存​​在。我对其他链接器标志和预处理器宏都进行了更改。在这两种情况下,除非您双击其他链接器标志和预处理器宏中的每一行,否则不会显示任何内容。然后可以看到$(inherited) 已经被添加了。我尝试删除和阅读。我尝试关闭并重新打开 xcode。当我输入 pod install 时,没有任何东西可以修复错误消息。 @msmq 现在已经有很长时间了,但您还记得您尝试过的解决方法吗? $(inherited) 已经在最上面,但它对我不起作用:/ 我已经添加了它,但 pod install 会抛出同样的错误。【参考方案2】:

您的构建设置与 Cocoapods 想要的默认构建设置之间存在冲突。要查看 Cocoapods 构建设置,请查看项目中 Pods/Target Support Files/Pods-$PROJECTNAME/ 中的 .xcconfig 文件。对我来说,这个文件包含:

GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
HEADER_SEARCH_PATHS = "$PODS_ROOT/Headers" "$PODS_ROOT/Headers/Commando"
OTHER_LDFLAGS = -ObjC -framework Foundation -framework QuartzCore -framework UIKit
PODS_ROOT = $SRCROOT/Pods

如果您对 Cocoapods 设置感到满意,请转到您项目的构建设置,找到合适的设置并按 Delete 键。这将使用来自 Cocoapods 的设置。

另一方面,如果您有需要使用的自定义设置,则将 $(inherited) 添加到该设置。

【讨论】:

我也遇到了这个问题,我能够删除 -ObjC 并解决了这个问题。但是,当我尝试构建项目时,我收到一条错误消息,提示找不到目标特定的 pod 库:“ld: library not found for -lPods-MyProject”。你有没有看到类似的东西? 我又遇到了这个问题。我不确定 $(inherited) 的意思。我在哪里添加它? @RodericCampbell 我发现从项目中删除 -ObjC 对我来说效果很好,我没有看到你的错误。 嗯,但我需要在运行时为它添加 -ObjC 标志,因为我有类别。 OTHER_LDFLAGS = 其他链接标志,HEADER_SEARCH_PATHS = 标题搜索路径,GCC_PREPROCESSOR_DEFINITIONS = 预处理器宏。 @kraftydevil,您要删除什么设置?【参考方案3】:

我在终端中看到了 pod 命令的这 3 个错误

pod install

[!] MY_APP [Debug/Release] 目标覆盖 HEADER_SEARCH_PATHS ... [!] MY_APP [调试/发布] 目标 覆盖 OTHER_LDFLAGS ... [!] MY_APP [调试/发布] 目标 覆盖 GCC_PREPROCESSOR_DEFINITIONS ...

通过将 $(inherited) 添加到

,所有这 3 个错误都将消失
    标题搜索路径 其他链接器标志 预处理器宏

项目 -> 目标 -> 构建设置中

现在该命令将运行而不会出现任何错误

pod install

【讨论】:

以上方法对我有用,只是简单地更改 Other Linker Flags 的标志是不够的。【参考方案4】:

我在运行pod install 时遇到了类似的问题,我看到了以下警告/错误(与CLANG_CXX_LIBRARY 有关):

来自 Cocoapods 的错误/警告

[!] The `Project [Debug]` target overrides the `CLANG_CXX_LIBRARY` build setting defined in `Pods/Target Support Files/Pods/Pods.debug.xcconfig'. This can lead to problems with the CocoaPods installation
    - Use the `$(inherited)` flag, or
    - Remove the build settings from the target.

[!] The `Project [Release]` target overrides the `CLANG_CXX_LIBRARY` build setting defined in `Pods/Target Support Files/Pods/Pods.release.xcconfig'. This can lead to problems with the CocoaPods installation
    - Use the `$(inherited)` flag, or
    - Remove the build settings from the target.

修复

    选择您的Project,这样您就可以看到Build Settings。 选择您的TargetAppNameTargets 下) 找到C++ Standard Library(它可能会显示为BOLD - 这意味着它已被覆盖)。 选择线(所以它突出显示为蓝色),然后按 ⌘ + DELETE(Command + Backspace)

该行不应再加粗,如果您运行pod install,警告/错误应该会消失。


视觉辅助

【讨论】:

【参考方案5】:

在您的项目中,找到Target -> Build Settings -> Other Linker Flags,选择Other Linker Flags,按delete(Mac 键盘)/Backspace(普通键盘)恢复设置。它对我有用。

例子:

之前

之后

【讨论】:

我们是否删除已位于 Other Linker Flags 中的设置?还是我们保留它们并添加 $(inherited) ??【参考方案6】:

对我来说,问题在于我的目标测试。我的主应用目标中已经有了$(inherited) 标志。

我将它添加到 MyAppTests 其他链接器标志。之后,当我运行pod install 时,警告信息消失了。

【讨论】:

【参考方案7】:

如果 Xcode 在链接时抱怨,例如未找到 -lPods 的库,它未检测到隐式依赖项:

转到产品 > 编辑方案 点击构建 添加 Pods 静态库 清理并重新构建

【讨论】:

我尝试了您建议的方式,但它没有按 pod 文件显示最近安装的框架,还有任何修复链接器标志错误的建议。 @Amit Saxena 当我的 Ionic 5/Cordova 9 应用程序中的 cordova-plugin-facebook4 插件的 Pod 出现相同类型的错误时,这对我有用。我添加了所有三个 Facebook 框架,清理了一个 presto!现在可以在 Xcode 模拟器上工作,但还不能在实际设备上工作(我使用的是带有 iOS 12.4.8 和 Xcode 11.6 的 iPhone 6)。【参考方案8】:

下面的第一行链接拯救了我的一天:

要从项目的构建设置中为选项添加值,请在值列表前面加上 $(inherited)。

https://github.com/CocoaPods/CocoaPods/wiki/Creating-a-project-that-uses-CocoaPods#faq

另外,不要忘记在你的 pod 文件的开头插入这一行:

platform :iOS, '5.0'

【讨论】:

在我的情况下,这可以节省我的时间:不要忘记在 pod 文件的开头插入这一行:平台:iOS,'5.0'【参考方案9】:

我添加了 $(inherited) 但我的项目仍未编译。对我来说,问题是标记“仅为活动架构构建”,我必须将其设置为 YES。

【讨论】:

如果项目正在编译,我们可以忽略警告吗?【参考方案10】:

不要忘记在你的 pod 文件的开头插入(或取消)这一行:

platform :iOS, '9.0'

这可以节省我的时间

【讨论】:

错了。必须是platform: ios, '9.0' 并不能解决问题。【参考方案11】:

每次我将 pod 添加到 podfile 时都会发生这种情况。

我不断尝试寻找问题,但我只是一次又一次地兜圈子!

错误信息范围,但是每次修复的方法都是一样的!

注释掉(#) podfile 中的所有 pod 并在终端中运行 pod install。

那么……

取消注释掉 podfile 中的所有 pod,然后再次运行 pod install。

这对我每次都有效!

【讨论】:

这没有帮助。【参考方案12】:

当我将 $(inherited) 标志添加到相关文件(在本例中为 LIBRARY_SEARCH_PATHS)时,它导致了另一个错误 Undefined symbols for architecture arm64: "_swift_getTypeByMangledNameInContextInMetadataState

更改以下内容有效,我能够构建:

>LIBRARY_SEARCH_PATHS = (
   "\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\"",
-  "\"$(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)\"", <--- Change this...
+  "\"$(TOOLCHAIN_DIR)/usr/lib/swift-5.2/$(PLATFORM_NAME)\"", <--- to this
   "\"$(inherited)\"",
> );

【讨论】:

以上是关于目标 ... 覆盖在 `Pods/Pods.xcconfig 中定义的 `OTHER_LDFLAGS` 构建设置的主要内容,如果未能解决你的问题,请参考以下文章

impdp 怎样覆盖目标库的同名存储。

Spark覆盖不会删除目标路径中的文件

创建一个精简版,使用多个目标,你如何避免覆盖完整版?

如何覆盖 dotnet publish 的目标文件夹

覆盖图像的目标文本

目标 ... 覆盖在 `Pods/Pods.xcconfig 中定义的 `OTHER_LDFLAGS` 构建设置