web-dev-qa-db-ja.com

Xcode 6リンカーエラー-アーキテクチャarmv7の未定義シンボル

Xcode 6ベータ7にアップグレードした後(Xcode 6 GMを使用したまま)、Swiftアプリをリンクできません。次のようなエラーが表示されます。

アーキテクチャarmv7の未定義シンボル:「_Swift_stdlib_compareNSStringDeterministicUnicodeCollat​​ion」、以下から参照:

...

ld:アーキテクチャarmv7のシンボルが見つかりませんclang:エラー:リンカコマンドが終了コード1で失敗しました(呼び出しを確認するには-vを使用してください)

他のSO Derived Dataフォルダーを削除すること、および/またはClean Build Folderオプションを使用してこのエラーを回避することを推奨する投稿を確認しましたが、私の場合はその解決策はまったく役に立ちませんでした。Xcode 6 beta 5が最後に機能してから、コードまたは使用しているCocoaPodsについて何も変更はありません。

何か案は?

編集:

エラーログの完全な投稿:

アーキテクチャarm64用の未定義シンボル: "_Swift_stdlib_compareNSStringDeterministicUnicodeCollat​​ion" から参照:BarcodeViewController.oでTFC12MyProject21BarcodeViewController13captureOutputfS0_FTGSQCSo15AVCaptureOutput_24didOutputMetadataObjectsGSQGSaPSs9AnyObject___14fromConnectionGSQCSo19AVCaptureConnection__T_ "__TFSs21_arrayConditionalCastU ___ FGSaQ__GSqGSaQ0 _"、から参照:SessionsTableViewController.oでTFC12MyProject27SessionsTableViewController17viewWillDisappearfS0_FSbT_ "__TFSs15_arrayForceCastU ___ FGSaQ__GSaQ"、から参照:RestApi.oの__TFC12MyProject7RestApi12tokenMappingfS0_FT_CSo15RKEntityMapping __TFC12MyProject28AttendeesTableViewControllerg24fetchedResultsControllerCSo26NSFetchedResultsController in AttendeesTableViewController.o __TFC12MyProject27SessionsControllerViewsControllerView26Controllered_Controls_ConstraintsControllerViewsControllers_Constraints_Constory_Constation_Constory_Controls BarcodeViewController.o ... LDにCheckinViewController.o __TFC12MyProject21BarcodeViewController13startScanningfS0_FT_SbにLoginViewController.o __TFC12MyProject21CheckinViewController16enableBeaconModefS0_FT_T_にLoginViewController.o __TFC12MyProject19LoginViewController16callProcessLoginfS0_FT_T_にLoginViewController.o __TFC12MyProject19LoginViewController35deregisterFromKeyboardNotificationsfS0_FT_T_にBluetoothManager.o __TFC12MyProject19LoginViewController32registerForKeyboardNotificationsfS0_FT_T_にRestApi.o __TFC12MyProject16BluetoothManager17_startAdvertisingfS0_FT_T_に__TFC12MyProject7RestApi12resetRestKitfS0_FT_T_:から参照codeViewController.o "__TFSs26_forceBridgeFromObjectiveCU__FTPSs9AnyObject_MQ__Q_"、:アーキテクチャarm64 clangのシンボルが見つかりません:エラー:リンカコマンドが終了コード1で失敗しました(呼び出しを確認するには-vを使用してください)

23
davidethell

ここで何が起きているかは、派生データの場所とは関係ありません。

Swiftアプリケーションがビルドされると、いくつかのステップが実行されます。

  • 補助ファイルを書き込む

  • 製品構造を作成する

  • コンパイルSwift各アーキテクチャのソース

  • リソースルールplistのコピー

  • アプリケーションブリッジングヘッダーをコピーする

  • Swift=各アーキテクチャのランタイムライブラリに対するリンク

  • アプリケーションをコピーSwift各アーキテクチャのモジュール

  • アプリケーションバイナリを作成する

  • リソースビルドフェーズのコピー

  • Swift=標準ライブラリをアプリケーションにコピーします

  • パッケージ化する

  • 署名する

ふう!それは沢山。 Swift=ランタイムライブラリに対してリンクしている場合、ビルドは失敗します。これらはToolchains/XcodeDefault.xctoolchain/usr/lib/Swift/iphoneos Xcode開発者ディレクトリ内。具体的には、正しくリンクされていないライブラリはlibswiftCore.dylib。そのライブラリでnmを使用すると、最初の欠落シンボルが定義されていることがわかります。

quellish% nm /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/Swift/iphoneos/libswiftCore.dylib | grep compareNSStringDeterministicUnicodeCollation
00197c8c T _Swift_stdlib_compareNSStringDeterministicUnicodeCollation
000000000018352c T _Swift_stdlib_compareNSStringDeterministicUnicodeCollation

lipoを使用して、ファイル内のアーキテクチャを確認することもできます。

quellish% xcrun lipo -info /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/Swift/iphoneos/libswiftCore.dylib
Architectures in the fat file: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/Swift/iphoneos/libswiftCore.dylib are: armv7 arm64

Armv7とarm64が含まれています。問題はライブラリアーキテクチャではありません。

Swift標準ライブラリに対するリンクが機能していません。ソース管理またはXcodeバージョンの移行により、プロジェクトファイルがリンク手順の一部を削除したか、単にライブラリを見つけられない可能性があります。 Xcodeプロジェクトファイルは複雑であり、多くの参照を使用しています-マージなどにより、重要な参照がリンク手順から切り離される可能性があります完全なビルドログとマシンの確認なし伝えることができないかもしれません。

ご想像のとおり、このライブラリは、プロジェクトの派生データの場所とは関係ありません。

残念ながら、プロジェクトファイルを再作成することをお勧めします。壊れたプロジェクトのビルドログをSwift正しくビルドするプロジェクトと比較すると、洞察が得られるかもしれませんが、時間の無駄になる可能性があります-修正可能な何かが問題である可能性が高いですが、ありません。

バグを報告し、面倒なプロジェクトファイルを含めることをお勧めします。

17
quellish

~/Library/Developer/Xcode/DerivedDataフォルダー内のすべてのデータを削除することで問題を解決しました。別のスレッドでそれについて読みましたが、そのプロセスがクリーンに含まれていると考えて無視しました!

10
Brad R

Yosemite、Xcode 6.1を更新しました。 gem xcodeproj(0.19.4)およびcocoapods(0.34.4)を更新しました。

私は私の競合を次のように解決しました:

Library/Developer/Xcode/DerivedDataフォルダーのクリア

ターゲットで置換->ビルド設定->リンク->その他のリンカーフラグ:$(OTHER_LDFLAGS)

ターゲットをチェックイン->ビルドフェーズ-> Podsリソースをコピー: "$ {SRCROOT}/Pods/Target Support Files/Pods/Pods-resources.sh"

8
Tayfundu37

1)同じ問題に直面していますが、User/Library/Developer/Xcode/DerivedDataと私はコードを実行することができます。

2)場合によっては、ビルド設定からarmv7アーキテクチャを削除して実行されます。また、ビルド設定でコンパイラがデフォルトコンパイラであることを確認します。

ありがとう、これがあなたとみんなに役立つことを願っています。

3

xcode 6に「アップグレード」し、Swiftアプリはシミュレータ用にビルドできませんが、iPadでは正常にビルドします-リンカーエラー、シミュレータ用i386の未定義シンボル。

Library/Developer/Xcode/DerivedDataフォルダーをクリアするとうまくいきました。

0
m0thman

似たような問題(Appleのフレームワークからのリンカーエラー)がありました。判明したように、問題はライブラリLocalAuthentication.frameworkが見つからないことでした。 [リンクライブラリ]セクションの[ビルドフェーズ]タブからFoundation.frameworkを削除してから、再度追加する必要があるのではないかと考えています。たぶんそれが問題を解決するでしょうか?

0
user3562213

これは、(ほとんどの場合)要求されたアーキテクチャをサポートしないサードパーティのライブラリをリンクすることによって引き起こされるようです。

0
Joshua Nozzi

ここで提案されたすべてのことを運なしで試した後、この問題を解決しました。先ほど誰かが言ったように、それはSourceControlの問題です。

プロジェクトファイルの1つ(エラーメッセージで参照されているファイル)がプロジェクトブラウザにありませんでした。ただし、XCodeにはまだ参照があります(Xcode GUIから「定義へジャンプ」を選択したときにクラス定義に移動していました)。

実際のところ、project.pbxprojはリストしていませんでした。これはおそらくGitの問題でした。いずれにせよ、ファイルを作成し直したのと同じディレクトリにファイルを作成し直しました。

0
GrandSteph

Xcode 6.0.1には、既存のプロジェクトファイルの依存関係を削除するリンカーのバグがあるようです。 6.0.1アップデート以降、新旧のいくつかの異なるプロジェクトで同じ問題が発生しました。

簡単な「修正」は、「Derrived Data」全体とすべてのビルドファイルを破棄する(つまり、プロジェクトを手動でクリーンアップする)だけで、Xcodeの再起動後に再構築します。魔法のように、リンカーは不足しているすべてのアーキテクチャ/シンボルを見つけるようになりました。

注:この同じバグが原因で、互換性のないv-tableがクラッシュしました。 C++リンカーは不完全なリンケージを生成しているように見え、realエラーが見つからない場合に不合理なエラーを引き起こします。繰り返しますが、単にクリーンな状態から再構築し、.. ta da ..頭痛の多くを節約し、非問題を追跡する時間を無駄にします。

0
Ralph K

私は長年にわたって他のいくつかの言語でコーディングを行ってきましたが、iOS Objective Cに関しては不満です。だから私はほとんどの場合、Objective Cで暗闇の中で突き刺しています。

.hファイルで次のように「グローバル」変数を宣言した直後に、このエラー「アーキテクチャarmv7の未定義シンボル」が発生し始めました。

extern NSString *globalNotes;
extern NSString *globalUserCountry;

その後、次のように.mファイルからこれらの変数を参照していました。

globalNotes= @"Error (Marker 1010)";
globalUserCountry= @"No result";

修正-これを修正するために、次のようなオブジェクトプロパティに変更しました。

@property(nonatomic, strong, readwrite) NSString *globalNotes;
@property(nonatomic, strong, readwrite) NSString *globalUserCountry;

そしてそれらを次のように参照しました:

self.globalNotes= @"Error (Marker 1010)";
self.globalUserCountry= @"No result";

これで問題が解決したようです。