web-dev-qa-db-ja.com

Xcode 10.0 GM --dyld:レイジーシンボルバインディングに失敗しました:シンボル___cxa_guard_acquireのクラッシュを解決できません。それ以前は正常に機能していました。

私はカカオポッドを使用してdeTesseractOCRライブラリをインストールしました。アプリは、iOS12デバイスを含むデバイスで実行すると正常に動作します。クラッシュはiOS12シミュレータでのみ発生します。 iOS 11.4 Simulatorもインストールしましたが、それでも問題なく動作します。私はしばらくの間これのために頭をかいてきました。これは私が得るクラッシュです。

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) 
6
Iancu Tudor
libstdc++ is removed in iOS 12 simulator but it remains in the iOS 12.0 (device) .

したがって、回避策として、ライブラリ(libstdc ++。6.0.9.tbd)をXcode9.4からXcode10にコピーできます。ただし、これは長期的な解決策ではありません。これらのライブラリのプロバイダーに連絡して、libc ++を使用してビルドされたバージョンを要求する必要があります。

またはCocoapodsを依存関係マネージャーとして使用している場合は、ポッドファイルに次のコマンドを追加できます。

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

終わり

4
Vineeth Joseph

よりクリーンなアプローチとして、ポッドファイルでフレームワークを次のように置き換えることができます。

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

IOS 12のこのブランチにサポートが追加されました。これが、私と同じように誰かに役立つことを願っています:)

1
Samir K

シミュレーターを実行するには、tdbファイルではなくdylibファイルをコピーする必要がありました。

前提条件Xcode 9.4が正確にその名前でインストールされている。必要に応じて、以下のFROMおよびTOを変更します。

これは、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

警告! Sudoが関係しているので、本当に注意する必要があります。あなたは私を信頼しますか?

コマンドをすぐにコピーすると、スクリプトはドライランを実行します。 Sudoの前にある:を削除して、ファイルシステムを実際に変更します。 set -xは、実行されたすべてのコマンドのログを有効にします。

質問とは関係ありませんが、CocoaPodsを使用する場合は、ある時点で次のパッチも適用する必要があります。 https://Gist.github.com/gali8/7d090865a904a16caf5a7a3116c3c3ab

1
JKvr

この方法を使用していますが、podfileファイル「pod'TesseractOCRiOS '、:git =>' git://github.com/parallaxe/Tesseract-OCR-iOS.git '、:branch = > 'macos-support'”

0
qizengkui