目标 ... 覆盖在 `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 theGCC_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
。
选择您的Target
(AppName
在Targets
下)
找到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` 构建设置的主要内容,如果未能解决你的问题,请参考以下文章