web-dev-qa-db-ja.com

失敗したビルド:ld:シンボル_OBJC_CLASS _ $ _ Algebra5FirstViewControllerの複製

IPhoneシミュレーターでアプリを実行すると、このエラーが突然発生します。

clang:エラー:リンカコマンドは終了コード1で失敗しました(呼び出しを確認するには-vを使用してください):

ld:シンボルOBアーキテクチャi386用のBuild/Intermediates/Algebra5.build/Debug-iphonesimulator/PSLE Algebra5.build/Objects-normal/i386/PSLE_Algebra5FirstViewController.o

それは何ですか?

71
Joe Shamuraq

クラスAlgebra5FirstViewControllerが複数回コンパイルされているように見えます。

Xcodeのプロジェクトソースに.mと.mmが1回だけ含まれていることを確認できますか?また、コンパイルログ(右のブレークポイントアイコンの横にある最後のアイコン)をチェックしてこれを確認し、一度だけコンパイルされることを確認することもできます。

また、このクラスがリンク先のライブラリの一部であり、同じ名前のクラスがある場合、同じエラーが発生する可能性があります。

最後に、古いオブジェクトファイルがまだ存在し、コンパイルされたファイルにジャンクがある場合に備えて、クリーンおよびリビルドを試すことができます。念のため...

編集

また、2番目の参照はExercisesViewControllerのファイルで作成されることに注意してください。このファイルに何かがあるのか​​もしれません。 .hの代わりにAlgebra5FirstViewControllerファイルを#importしたか、またはExercisesViewControllerに@implementation(ExercisesViewController)の代わりに@implementation(Algebra5FirstViewController)が含まれているか、再構築のクリーンアップでクリーンアップされるこのファイルにジャンクがありました。

67
J_D

これは、ターゲットの「ビルドフェーズ」の「コンパイルソース」セクションで同じ.mファイルが複数回参照されている場合に発生する可能性があります。重複したエントリを削除すれば大丈夫です。

51
Andreas Ley

また、実装ファイル(正しく)ではなく、ヘッダーファイルでconst * NSStringを(誤って)宣言することにより、この問題が発生しました。

30
toblerpwn

.hではなく.mを誤ってインポートしたため、この問題が発生しました。これを読んで、同じ問題を抱えている人をいつか救うことを願っています。

24
user441669

同じ問題がありました。解決しました!

プロジェクトにファイルをインポートした場合は、ターゲット(プロジェクト名)->ビルドフェーズ->ソースのコンパイルに同じものが存在するかどうかを確認します。

ファイルが存在しない場合は、表示された(+)追加ボタンを使用してファイルを含めます。また、重複するファイルが存在する場合(存在する場合)、それを削除します。

次に、cmd + shift + kを押してプロジェクトをクリーンアップします。新規ビルドではこのエラーは表示されません。

enter image description here

10

@paiegoが説明したように、別のプロジェクトからファイルを追加するときに同様のエラーが発生しました。私のエラーは、「ターゲットに追加」をチェックしなかったことです。上記で説明したように、参照を削除してファイルを再度追加しましたが、今回は「Add to targets」をチェックします。

5
Eric

私は同様のエラーを受け取っていましたが、解決しました この方法

「Pods」プロジェクトとアプリのターゲットに対して、Build Active Architecture OnlyをNOに設定してみてください

4
zeeawan

あるケースでは、新しいクラスの.hと.mをプロジェクトにドラッグすると、このエラーが発生しました。私が見つけた唯一の解決策は、これらのファイルへの参照を削除してから、プロジェクトメニューから追加し直すことでした。

3
paiego

TableViewControllerでViewController.mをインポートしたときに会いました。終了したら、「#import "ViewController.m"」を削除してみてください。この助けを願っています!

3
Huy Hóm Hỉnh

これは、「ソースのコンパイル」セクションで一部のファイルが欠落しているか、一部のファイルで重複したエントリが見つかったために発生します。私の場合、2つのファイルに重複したエントリがあり、ファイルごとに1つのエントリを削除して、問題を解決しました。お役に立てれば。

1
user2364956

[XCODE 7.1 UPDATE]

最初に機能したオプション:

Deployment Targetを7.1から8.1に変更すると、エラーはなくなりました。

それが誰かを助けることを願っています。

UPDATE(2日目):2回目にここに戻ってきました。

2日目に、この厄介なエラーに加えて、さらにエラーが発生し始めました。問題は、Xcodeが認識できない競合するファイルでした。以下のリンクをヘルプとして使用しました。

  1. "_ OBJC_CLASS _ $ _ viewsampleViewController"、参照元:

  2. 「ld:警告:オプションのディレクトリが見つかりません」

そして最終的に:

  1. "_ OBJC_CLASS _ $ _ viewsampleViewController"、参照元:

私は、FrameWork Search Paths + Compile Resources + Run Script Phases +ポッドからすべてを削除してから、それらを再インストールして、最終的に成功を見つけました。

私のサイズの問題(2日目)は、競合するファイルまたはXcodeが認識しなかったファイルに関する問題でした。

しかし、最終的には、すべてを削除し(上記およびリンクに記載)、何度もクリーニングし、ポッド/フレームワーク/実行スクリプトフェーズを再インストールすると役立ちました。

これが誰かの助けになることを本当に願っています。

1
Lukesivi

私はこのエラーに遭遇し、iOS 9に固有と思われる別のソリューションを使用する必要があったため、これに対する新しい回答を投稿しています。

ビルド設定でビットコードを有効にするを明示的に無効にする必要がありましたが、これはアップデートで自動的にオンになります。

参考回答: iOS 9の新しい警告

1
mrshickadance

私が手に入れたら

18 duplicate symbols for architecture i386
clang: error: linker command failed with exit code 1

私にとって、これはスイッチケースで「const NSInteger」を使用したためです。

私がやったことは、const NSIntegerをenumに変更し、参照をenum値に置き換えることです。

これでエラーが修正されました。

1
sahan maldeniya

Mの場合、ファイルをプロジェクトにドラッグした後、機能しなかったため、「プロジェクトにファイルを追加する」ファイルをクリックしたようです。両方とも間違ったアプローチでした。他の.hファイルと.mファイルが格納されているプロジェクトフォルダー(Finder)にドラッグします。

1
Jasper Braun

「リンカーコマンドが終了コード1で失敗しました(呼び出しを表示するには-vを使用)」-iPhoneでphonegapアプリケーションを実行すると、このエラーが発生しました。 Build Active Architecture OnlyをYesに変更し、正常に機能しました。

1
user2218998

私はこれを見つけました 記事 それは私に解決策を提供しました。 Xcode 7に関係します。Xcode7では、以前のバージョンでは「共通ブロックなし」のデフォルトは「いいえ」ではなく「はい」です。

これは記事からの引用です:

問題は、Xcodeの最新バージョンで、[ビルド設定]ペインの[Apple LLVM 6.1-コード生成]セクションの[共通ブロックなし]が[はい]に設定されているようです。

これにより、Compile Sourcesに含まれるクラスが別のソースファイル(appDelegate.m)の#importを介して参照される循環参照として説明します。これにより、元の基本クラスで宣言された変数のブロックが重複していました。

値を[いいえ]に変更すると、すぐにアプリがコンパイルされ、問題が解決しました。

1
Jazzmine

私は図書館でこれと同じ問題を抱えていましたが、ここに挙げた答えをすべて試しましたが、何も助けませんでした。

私は単純にライブラリを削除 Link Binary With Librariesから再追加になり、うまくいきました。

0
Dan Leveille

ライブラリまたはファイルが見つからない場合、この問題のバリエーションが発生する可能性があります。 Project Explorerに不足しているファイルがないことを確認します。Xcodeで見つからない場合は赤で書き込まれます。

0
SeanR

「ライブラリとバイナリをリンク」には、古いプロジェクト名ポッドライブラリがありました。削除後に修正されました。

  1. リストアイテム
  2. プロジェクト
  3. ビルド段階
  4. バイナリをライブラリにリンク
  5. 非推奨のライブラリを削除します。
0
Adi

単に掃除 CMD + SHIFT + K、その後構築 CMD + B 私のために働いた。

0
drayfar

この問題を解決する唯一の(そして確実な)方法は、コマンドラインからテストをビルドすることです。

xcodebuild -workspace MyProject.xcworkspace/ -scheme MyScheme -sdk iphonesimulator -destination 'platform=iOS Simulator,name=iPhone 7,OS=10.3.1' test

したがって、この時点でコンパイルは確実に失敗しますが、すべてのリンクの問題が表示されます。私の場合、次のようないくつかの問題がありました。

  • ld:フレームワーク 'Foo'が見つかりません
    これを解決するには、ターゲットでBuildSettings-> Linking-> OtherLinkerFlagsを実行し、「Foo」フレームワークを削除する必要があります。
  • 未解決の識別子 'ClassName'の使用
    これを解決するには、UITestターゲットにもファイルのターゲットメンバーシップを追加/確認する必要があります。

他の可能性のある問題はxcodebuildによって発生し、簡単に修正できます。

0
Luca Davanzo

Bolts.frameworkで作業しているときにも同じ問題が発生しました。ボルトが破損した場合、再インポートしても問題は解決されないことがわかりました。元のダウンロードファイルに戻り、最初から完全に再インポートする必要がありました。これですぐに修正されました。それは非常に奇妙な問題でしたので、私はそれを理解するのに永遠にかかりました...うまくいけば、このヒントが同じ欲求不満からあなたの何人かを救うことを願っています:)

0
Jul3ia

必要なフレームワークを追加せずにサブクラスを実装しているときにこのエラーが発生しました(この例では、MediaPlayerフレームワークなしのMPMoviePlayerController)

0
DanWebster

.hファイルと.mファイルの両方を同じクラスに(偶然に)インポートすることで、これを1回受け取りました。

0
sma

これはUILabelリファレンスとintに同じ名前を付けたときに発生しましたが、実行しようとしたときにのみ入力してもエラーは発生しませんでしたので、それが問題であることはわかりませんでしたが、 「スコア」であるラベルのようなものがあり、それをスコアと呼び、スコアでもあるintに名前を付けると、この問題が発生します。

0
Yakov Shalunov

OSX 10.7.5でXcode 4.6.3を実行すると、アーキテクチャをビルドマシンのネイティブアーキテクチャを$(NATIVE_Arch_ACTUAL)から変更することでこのエラーを修正できました。

0