如何删除警告:" - pie被忽略.它仅在链接主可执行文件时使用"

sar*_*rah 30 xcode ios cocoapods

在此输入图像描述

自从更新到Xcode10和Swift 4.2后,我总是在我的pod中获得这个构建时间警告.我该怎么做才能删除此警告?

我试图删除派生数据,清理和生成项目,但它不起作用:(

我发现有人在这里问了同样的问题https://github.com/Alamofire/Alamofire/issues/2624并且Jon Shier得到了答案,但是在删除以前的xcworkspace并更新cocoapods之后我仍然无法解决问题,我没有实现更改"生成位置相关的可执行文件"设置,因为我找不到它.请分享,如果你能找到这个问题的解决方案:)

Mar*_*pek 19

最终对我有用的是为 Pods 项目启用依赖位置的代码。我之前尝试禁用来自 pod 的警告并清除(而不是启用)生成位置相关代码设置,但这并没有真正起作用。

为 Pod 禁用 -pie

要启用位置相关代码(因此除去-pie,这是P ositionndependent Ç ODE),打开xcworkspace后,去荚项目构建设置(设置为整个Pods项目,见截图),搜索position和将生成位置相关代码构建设置设置为是。

更改 Pod 的饼图设置


Ben*_*Ben 16

将“生成与位置相关的代码”设置为“是”感觉不正确。位置无关的是首选。框架和库之类的非应用程序目标始终始终与位置无关,因此发出警告。

显示的警告是链接器消息,@ Marcpek的屏幕快照中的其他设置似乎更合适:“链接>生成位置相关的可执行文件”。快速帮助显示此LD_NO_PIE设置。

生成位置相关的可执行LD_NO_PIE设置

即使这No从操作系统默认值继承而来,我还是尝试在我的CocoaPod目标中再次将其再次设置为No,并且似乎可以解决链接器警告。

您所做的任何项目设置都将在下次运行时丢失,pod install因此请编辑Podfile以使更改永久生效。添加config.build_settings['LD_NO_PIE'] = 'NO'到post_install阶段:

post_install do |installer|
    installer.pods_project.targets.each do |target|
        target.build_configurations.each do |config|
            config.build_settings['LD_NO_PIE'] = 'NO'
        end
    end
end
Run Code Online (Sandbox Code Playgroud)

  • 使用 Xcode 11 完成所有这些操作,仍然收到该死的 -pie 警告。 (2认同)

ste*_*vex 5

一种选择是切换到将 pod 链接为静态库而不是框架。use_frameworks!当 Swift 不支持静态库时是必需的,但现在它支持了,您可以从 Podfile 中删除该行pod install,警告应该消失了。

关于历史的更多信息use_frameworkshttps : //stackoverflow.com/a/49469205/8831