web-dev-qa-db-fra.com

Xcode 10.0 GM - dyld: échec of the link by symbole: impossible de résoudre le crash du symbole Ça fonctionnait bien avant ça

J'ai utilisé des cosses de cacao pour installer la bibliothèque TesseractOCR. L'application fonctionne correctement lors de l'exécution sur des appareils, y compris des appareils iOS12. Le crash ne se produit que sur le simulateur iOS12. J'ai également installé iOS 11.4 Simulator et cela fonctionne très bien avec celui-là. Je me gratte la tête depuis un moment. C'est le crash que je reçois. 

dyld: lazy symbol binding failed: can't resolve symbol ___cxa_guard_acquire in /Users/IancuTudor/Library/Developer/CoreSimulator/Devices/ABE5EE31-47C8-4457-8F33-B4C265599147/data/Containers/Bundle/Application/40814EAD-8965-47F2-8036-3DE48A8143BF/Bookly.app/Frameworks/TesseractOCR.framework/TesseractOCR because dependent dylib #1 could not be loaded

dyld: can't resolve symbol ___cxa_guard_acquire in /Users/IancuTudor/Library/Developer/CoreSimulator/Devices/ABE5EE31-47C8-4457-8F33-B4C265599147/data/Containers/Bundle/Application/40814EAD-8965-47F2-8036-3DE48A8143BF/Bookly.app/Frameworks/TesseractOCR.framework/TesseractOCR because dependent dylib #1 could not be loaded
(lldb) 
5
Iancu Tudor
libstdc++ is removed in iOS 12 simulator but it remains in the iOS 12.0 (device) .

En guise de solution de contournement, vous pouvez donc copier la bibliothèque (libstdc ++. 6.0.9.tbd) de Xcode 9.4 à Xcode 10. Mais ce n’est pas une solution à long terme. Vous devez contacter le fournisseur de ces bibliothèques et demander les versions construites avec libc ++.

OU Vous pouvez ajouter la commande suivante à votre fichier pod si vous utilisez Cocoapods en tant que gestionnaire de dépendance:

post_install do |installer|
installer.pods_project.targets.each do |target|
    if target.name == 'TesseractOCRiOS' 
        target.build_configurations.each do |config|
            config.build_settings['ENABLE_BITCODE'] = 'NO'
        end
        header_phase = target.build_phases().select do |phase|
            phase.is_a? Xcodeproj::Project::PBXHeadersBuildPhase
        end.first

        duplicated_header_files = header_phase.files.select do |file|
            file.display_name == 'config_auto.h'
        end

        duplicated_header_files.each do |file|
            header_phase.remove_build_file file
        end
    end
end

fin

3
Vineeth Joseph

Je devais copier les fichiers dylib, pas les fichiers tdb pour que le simulateur fonctionne.

Prérequis: vous avez Xcode 9.4 installé avec exactement ce nom. Modifiez FROM et même TO ci-dessous si nécessaire.

Voici mes commandes de terminal pour la copie des fichiers Dylib:

FROM="Xcode 9.4"
TO="Xcode"
set -x; for f in /Applications/"$FROM".app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/usr/lib/libstdc++*; do : Sudo cp -p "$f" "${f/$FROM/$TO}"; done; set +x

ATTENTION! Vous devriez être très prudent car il y a un Sudo impliqué. ME FAIS-TU CONFIANCE?

Le script fera un essai si vous copiez ma commande tout de suite. Supprimez le : devant Sudo pour modifier réellement votre système de fichiers. set -x permettra la journalisation de toutes les commandes exécutées.

Pas lié à la question, mais si vous utilisez CocoaPods, vous devrez probablement appliquer le correctif suivant: https://Gist.github.com/gali8/7d090865a904a16caf5a7a3116c3c3ab

1
JKvr

En tant que solution plus propre, vous pouvez maintenant remplacer le cadre dans votre fichier pod en tant que: 

pod 'TesseractOCRiOS', :git => 'git://github.com/parallaxe/Tesseract-OCR-iOS.git', :branch => 'macos-support'

Un support a été ajouté dans cette branche pour iOS 12. J'espère que cela aidera quelqu'un comme il m'a fait :)

0
Samir K

J'utilise cette méthode, mais une erreur s'est produite dans le fichier podfile «pod 'TesseractOCRiOS',: git => 'git: //github.com/parallaxe/Tesseract-OCR-iOS.git',: branch = > 'macos-support' ”

0
qizengkui