Ld linker не работает с абсолютной ошибкой адресации, даже если включен PIE - PullRequest
0 голосов
/ 18 октября 2018

За последние несколько дней я столкнулся с проблемой, которую не мог решить.Я пытаюсь создать старый (6 лет!) Мой игровой проект для iOS, и компоновщик не работает со следующей ошибкой:

Absolute addressing not allowed in arm64 code but used in '-[Snip snap]' referencing '_NSFileModificationDate' for architecture arm64

Указанный класс вызывает NSDictionary-objectForKey: с NSFileModificationDate в качестве параметра.Это исходный файл Objective-C ++, так как он включает в себя код на C ++.

Так что, насколько я понимаю, компоновщик считает, что я скомпилировал мои источники как зависящие от позиции, и завершается неудачно, как и предполагалось в arm64.Но почему это так?

Что я пробовал или проверял до сих пор:

  • Настройки сборки:
    • Связывание> Создание зависимого от позиции исполняемого файла: NO
    • Связывание> Другие флаги компоновщика: -all_load -ObjC
    • Apple Clang - Генерация кода> Создать код, зависящий от позиции: NO
  • do clean и удалите папку DerivedData перед перестройкой после любых изменений
  • удалили все сторонние и статические и динамические библиотеки.Я просто использую несколько фреймворков Apple
  • удалил все исходные файлы, которые включали asm код
  • , искал любые неизвестные мне директивы препроцессора
  • воссоздалвесь проект с нуля и копирование в него моих исходных файлов, чтобы убедиться, что в моем старом проекте нарушены настройки
  • любых .m или .mm исходных файлов, которые включают в себя такую ​​же константу, как и NSFileModificationDate.связывание
  • otool -hv дает:

    magic cputype cpusubtype caps filetype ncmds sizeofcmds flags MH_MAGIC_64 ARM64 ALL 0x00 OBJECT 4 3000 SUBSECTIONS_VIA_SYMBOLS

Вот команда компиляции для ошибочного файла (извините(это многословно):

CompileC SNIP/Build/Intermediates.noindex/SNIP.build/Debug-iphoneos/SNIP.build/Objects-normal/arm64/Snip.o SNIPDesktop/SNIP/SNIP/Classes/App/Snip.mm normal arm64 objective-c++ com.apple.compilers.llvm.clang.1_0.compiler (in target: SNIP)
cd SNIPDesktop/SNIP/SNIP
export LANG=en_US.US-ASCII
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -x objective-c++ -arch arm64 -fmessage-length=0 -fdiagnostics-show-note-include-stack -fmacro-backtrace-limit=0 -std=gnu++14 -stdlib=libc++ -fmodules -gmodules -fmodules-cache-path=SNIPLibrary/Developer/Xcode/DerivedData/ModuleCache.noindex -fmodules-prune-interval=86400 -fmodules-prune-after=345600 -fbuild-session-file=SNIPLibrary/Developer/Xcode/DerivedData/ModuleCache.noindex/Session.modulevalidation -fmodules-validate-once-per-build-session -Wnon-modular-include-in-framework-module -Werror=non-modular-include-in-framework-module -Wno-trigraphs -fpascal-strings -O0 -Wno-missing-field-initializers -Wno-missing-prototypes -Werror=return-type -Wdocumentation -Wunreachable-code -Wno-implicit-atomic-properties -Werror=deprecated-objc-isa-usage -Wno-objc-interface-ivars -Werror=objc-root-class -Wno-arc-repeated-use-of-weak -Wimplicit-retain-self -Wno-non-virtual-dtor -Wno-overloaded-virtual -Wno-exit-time-destructors -Wduplicate-method-match -Wno-missing-braces -Wparentheses -Wswitch -Wunused-function -Wno-unused-label -Wno-unused-parameter -Wunused-variable -Wunused-value -Wempty-body -Wuninitialized -Wconditional-uninitialized -Wno-unknown-pragmas -Wno-shadow -Wno-four-char-constants -Wno-conversion -Wconstant-conversion -Wint-conversion -Wbool-conversion -Wenum-conversion -Wno-float-conversion -Wnon-literal-null-conversion -Wobjc-literal-conversion -Wshorten-64-to-32 -Wno-newline-eof -Wno-selector -Wno-strict-selector-match -Wundeclared-selector -Wdeprecated-implementations -Wno-c++11-extensions -DDEBUG=1 -DOBJC_OLD_DISPATCH_PROTOTYPES=0 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.0.sdk -fstrict-aliasing -Wprotocol -Wdeprecated-declarations -Winvalid-offsetof -miphoneos-version-min=12.0 -g -fvisibility-inlines-hidden -Wno-sign-conversion -Winfinite-recursion -Wmove -Wcomma -Wblock-capture-autoreleasing -Wstrict-prototypes -Wrange-loop-analysis -Wno-semicolon-before-method-body -Wunguarded-availability -fembed-bitcode-marker -index-store-path SNIP/Index/DataStore -iquote SNIP/Build/Intermediates.noindex/SNIP.build/Debug-iphoneos/SNIP.build/SNIP-generated-files.hmap -ISNIP/Build/Intermediates.noindex/SNIP.build/Debug-iphoneos/SNIP.build/SNIP-own-target-headers.hmap -ISNIP/Build/Intermediates.noindex/SNIP.build/Debug-iphoneos/SNIP.build/SNIP-all-target-headers.hmap -iquote SNIP/Build/Intermediates.noindex/SNIP.build/Debug-iphoneos/SNIP.build/SNIP-project-headers.hmap -ISNIP/Build/Products/Debug-iphoneos/include -ISNIPDesktop/SNIP/SNIP/External -I/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.0.sdk/usr/include/libxml2 -ISNIP/Build/Intermediates.noindex/SNIP.build/Debug-iphoneos/SNIP.build/DerivedSources/arm64 -ISNIP/Build/Intermediates.noindex/SNIP.build/Debug-iphoneos/SNIP.build/DerivedSources -FSNIP/Build/Products/Debug-iphoneos -include SNIP/Build/Intermediates.noindex/PrecompiledHeaders/SharedPrecompiledHeaders/12134743132148408221/SNIP_prefix.pch -MMD -MT dependencies -MF SNIP/Build/Intermediates.noindex/SNIP.build/Debug-iphoneos/SNIP.build/Objects-normal/arm64/Snip.d --serialize-diagnostics SNIP/Build/Intermediates.noindex/SNIP.build/Debug-iphoneos/SNIP.build/Objects-normal/arm64/Snip.dia -c SNIPDesktop/SNIP/SNIP/Classes/App/Snip.mm -o SNIP/Build/Intermediates.noindex/SNIP.build/Debug-iphoneos/SNIP.build/Objects-normal/arm64/Snip.o

Чего мне не хватает?Какие еще подсказки я должен искать?Есть ли какие-нибудь предупреждающие сообщения, которые я должен проверить?

Спасибо за вашу благодарную помощь!

...