8

独自のフレームワークを追加した後にプロジェクトをビルドしようとすると、Xcode4.5.1で「シンボルの重複」エラーが発生します。フレームワークファイルの重複を確認しましたが、重複はありません。しかし、フレームワークをプロジェクトに追加すると、これらのエラーが発生します。提案してください..

duplicate symbol _NXArgc in:
    /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.0.sdk/usr/lib/crt1.3.1.o
/Users/idcc/Test/MyFW/Products/MyTestFW.framework/MyTestFW

duplicate symbol _NXArgv in:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.0.sdk/usr/lib/crt1.3.1.o
/Users/idcc/Test/MyFW/Products/MyTestFW.framework/MyTestFW

duplicate symbol ___progname in:
  /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.0.sdk/usr/lib/crt1.3.1.o
/Users/idcc/Test/MyFW/Products/MyTestFW.framework/MyTestFW

duplicate symbol _environ in:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.0.sdk/usr/lib/crt1.3.1.o
/Users/idcc/Test/MyFW/Products/MyTestFW.framework/MyTestFW

duplicate symbol start in:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.0.sdk/usr/lib/crt1.3.1.o
/Users/idcc/Test/MyFW/Products/MyTestFW.framework/MyTestFW
ld: 8 duplicate symbols for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)

前もって感謝します..

4

5 に答える 5

17

2つのサードパーティフレームワークを使用しても同じ問題が発生しました。ビルド設定の「その他のリンカーフラグ」から「all_load」を削除することで、これを解決しました。

于 2013-10-29T09:31:15.713 に答える
8

これらのシンボルは、標準Cライブラリのスタートアップコードであるcrt.oにあります。通常、グローバル変数とオブジェクトを初期化するための実行可能ファイルのエントリポイントである必要があります。また、メイン関数を呼び出します。

ただし、フレームワークの場合、フレームワークにメインが含まれていてはならないため、バイナリに含めないでください。フレームワークのターゲットビルド設定で「YES」として「LinkwithStandardLibrary」オプションがあると思います。これにより、crt.oがフレームワークにリンクされます。また、フレームワークをプロジェクトにリンクすると、シンボルが重複します。

ビルド設定で[標準ライブラリとのリンク]オプションを[いいえ]に設定してください。

于 2013-01-30T01:20:39.370 に答える
7

アプリケーションは、8つの複製シンボルがある実装を提供しています。

これを行うには、いくつかの方法があります。

同じクラスを宣言する2つのモジュールがあります。おそらく1つはもう必要ありませんか?

.mファイルと.hファイルの両方にヘッダーファイルをインポートしています:-(1つの場所から削除します。)

.mファイルをどこかにインポートしています。:-( .mファイルの代わりに.hファイルをインポートします)

.hファイルのいずれかの@interface{}の外側(上)でconst変数を定義および宣言しましたが、重複している可能性があります。:-( .mファイルで実行してください。)

于 2014-04-05T07:14:29.247 に答える
2

.hまた、定数などのグローバル変数がアプリケーションのファイルで正しく定義されているかどうかも確認してください。

グローバル変数を定義する正しい方法は、ファイル内externの変数を使用することです。.h

注:これは、以前のXcodeバージョンの問題ではありません。Xcode 6.3で問題に直面し、解決しました。

于 2015-07-21T09:37:16.997 に答える
0

シミュレーターでアプリを実行したときにのみこの問題が発生する場合は、ローカルフォルダーを削除することで解決します

~/Library/Developer/CoreSimulator

Xcodeは、最初のビルドと実行後にそれを復元します。 これを行う前に、すべての設定(特にシミュレータデバイスに関連する設定)をバックアップしてください。

Xcodeバージョン7.2.1(7C1002)でテスト済み

于 2016-04-30T15:53:54.960 に答える