Как удалить предупреждение: "-pie игнорируется. Он используется только при связывании основного исполняемого файла" - программирование
Подтвердить что ты не робот

Как удалить предупреждение: "-pie игнорируется. Он используется только при связывании основного исполняемого файла"

enter image description here

после обновления до Xcode10 и Swift 4.2 я всегда получаю предупреждения о времени сборки в моем модуле. что я должен сделать, чтобы удалить это предупреждение?

Я пытался удалить производные данные, очистить и построить проект, но он не работает :(

Я нашел, что кто-то задает тот же вопрос здесь https://github.com/Alamofire/Alamofire/issues/2624, и есть ответ от Джона Шира, но я все еще не могу решить проблему после удаления предыдущего xcworkspace и обновления cocoapods, Я не реализовал изменение параметра "Создать зависимый от позиции исполняемый файл", потому что не могу его найти. Пожалуйста, поделитесь, если вы можете найти решение этой проблемы :)

4b9b3361

Ответ 1

Установка "Генерировать позиционно-зависимый код" на "Да" не является правильным решением. Независимо от позиции является предпочтительным. Цели, не связанные с приложениями, такие как фреймворки и библиотеки, всегда будут в любом случае независимыми от позиции, поэтому предупреждение.

Отображаемое предупреждение является сообщением компоновщика, и другой параметр в снимке экрана @Marcpek кажется более подходящим: "Связывание> Создать зависимый от позиции исполняемый файл". QuickHelp показывает, что это настройка LD_NO_PIE.

Generate Position-Dependent Executable LD_NO_PIE setting

Несмотря на то, что это все равно наследует No от значений по умолчанию ОС, я попытался снова установить его в Нет в моих целях CocoaPod явно, и это, похоже, сработало, исправляя предупреждение компоновщика.

Любые ваши настройки проекта будут потеряны при следующем запуске 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

Ответ 2

В конечном итоге, мне удалось включить позиционно-зависимый код для проекта Pods. Я пытался отключить предупреждения от модулей и очистить (вместо того, чтобы включить) параметр "Генерировать код, зависящий от позиции", но это не помогло.

Отключить -pie для модулей

Чтобы включить позиционно-зависимый код (и, следовательно, удалить -pie, который является P osition I независимой C ode), после открытия xcworkspace перейдите в Настройки сборки проекта Pods (настройки для всего проекта Pods, см. скриншот), выполните поиск по position и установите для параметра "Построение кода, зависящего от позиции" значение Да.

Changing pie setting for Pods

Ответ 3

Один из вариантов - переключиться на связывание модулей в виде статических библиотек вместо фреймворков. use_frameworks! требовался, когда Swift не поддерживал статические библиотеки, но теперь, когда он это делает, вы можете удалить эту строку из вашего подфайла, pod install, и предупреждение должно исчезнуть.

Больше информации по истории use_frameworks: fooobar.com/questions/2423615/...

Ответ 4

  • обновить cocoapods
  • Удалить xcworkspace
  • запустить "pod install"
  • clear Создать папку в меню "Продукт"