如何删除警告:“-pie被忽略。仅在链接主要可执行文件时使用”

时间:2018-10-13 02:56:56

标签: ios xcode cocoapods

enter image description here

自从更新到Xcode10和Swift 4.2以来,我总是在pod中收到此构建时间警告。我该怎么做才能删除此警告?

我试图删除派生数据,清理并构建项目,但是它不起作用:(

我发现有人在这里https://github.com/Alamofire/Alamofire/issues/2624提出了相同的问题,乔恩·谢尔(Jon Shier)给出了答案,但是在删除以前的xcworkspace和更新cocoapods之后,我仍然无法解决该问题,我尚未实现更改“生成位置相关的可执行文件”设置,因为我找不到它。如果您能找到此问题的解决方案,请分享:)

5 个答案:

答案 0 :(得分:7)

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

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

Generate Position-Dependent Executable LD_NO_PIE setting

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

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

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

答案 1 :(得分:2)

最终对我有用的是为Pods项目启用与位置相关的代码。我曾尝试从Pod禁用警告,并清除(而不是启用) Generate Position-Dependent Code (生成位置相关代码)设置,但这确实没有用。

为豆荚禁用-pie

在打开以下代码后,启用位置相关的代码(并因此删除-pie,即 P 位置 I I 独立于 C ode)。 xcworkspace,转到Pods项目构建设置(整个Pods项目的设置,请参见屏幕截图),搜索position并设置 Generate Position-Dependent Code 生成设置到是。

Changing pie setting for Pods

答案 2 :(得分:2)

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

有关use_frameworks的历史的更多信息:https://stackoverflow.com/a/49469205/8831

答案 3 :(得分:0)

我已通过设置Build Settings -> Packaging -> Convert Copied Files = yes

解决了问题

答案 4 :(得分:-2)

  • 更新cocoapods
  • 删除xcworkspace
  • 运行“ pod安装”
  • 清除“产品”菜单中的“构建”文件夹