10

Appcelerator Titanium によって生成された iPhone アプリケーションをコンパイルしようとすると、Snow Leopard 10.6.2 の Xcode 3.2.1 で次のエラーが発生します。ただし、ビルド エラーは、アーキテクチャ メニューで iPhone シミュレーターを選択した場合にのみ表示され、iPhone デバイスを選択すると、自分のデバイスでアプリを実行できます。

さらに、iPhone シミュレーターは正常に起動し、Xcode を使用してビルドする Titanium 環境からプログラムを直接実行します。

なぜこうなった ?

ld: duplicate symbol _main in Resources/libTitanium.a(main.o) and /Users/prithviraj/Documents/project/Final/build/iphone/build/Final.build/Debug-iphonesimulator/Final.build/Objects-normal/i386/main.o collect2: ld returned 1 exit status Command /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc-4.2 failed with exit code 1

4

11 に答える 11

19

これがなぜ起こっているのかはわかりませんが、回避策を提案できます。私の Titanium プロジェクト用に生成された main.m ファイルの内容全体をコメントアウトすると、正常にコンパイルしてシミュレーターで実行することができました。それがうまくいくかどうか教えてください。

于 2010-03-29T01:09:20.847 に答える
11

プロジェクトに main 関数の複数の宣言があるかどうかを確認してください。

于 2011-01-30T06:54:05.877 に答える
8

私はこれと戦うのに数時間を費やしました。-all_load リンカー フラグを使用していたためです。そのフラグを使用してカテゴリのバグを回避している場合は、他の解決策がいくつかあります -こちらを参照してください。

于 2011-02-02T17:05:22.400 に答える
6

同様の問題がありました。単体テスト クラスが誤ってビルドに含まれていました。プロジェクトで「main(」を検索すると、重複した関数が見つかる可能性があります。

于 2011-04-07T15:48:01.983 に答える
1

ファイルを次のように定義しているため、この問題が発生しました。

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
... 
} 

また、ファイル main.m もありました。

int main(int argc, char* argv[])
{
    @autoreleasepool {
        int retVal = UIApplicationMain(argc, argv, nil, @"AppDelegate");
        return retVal;
    }
}
于 2015-08-08T21:23:22.383 に答える
1

これは2つの理由で私に起こりました:

1: クラス A がクラス B を呼び出し、両方が同じクラスをインポートしました。クラスを .m ファイルにインポートして修正します。

2: 2 つのクラスに同じ名前の定数があります (定数が .m ファイルで定義されている場合でも)。定数の名前を変更して修正します。

于 2012-08-14T21:30:48.970 に答える
0

この状態になるには複数の方法があるようです。私のは違いました。.xibイベントセレクターからビューコントローラーの.h実装にドラッグすると、メソッドが自動生成されるヒントを読みました。かっこよかったです。私はすぐに重複したシンボルエラーを受け取り始めました-それはクールではありませんでした。

何が起こったのかを確認するためにリンカーを深く掘り下げる時間がありませんでした。新しいViewControllerを作成し、古い.xibのコンテキストを新しい人にコピーしました。古い.h、.m、.xibを削除してビルドすると、再び機能しました。非常に奇妙で、非常に迷惑な時間の無駄です。

このxcodeの「便利さ」には明らかにいくつかのバグがあります。

于 2012-09-15T14:46:39.007 に答える
0

これらの他の回答からわかることに基づいて、一連のmainメソッドを削除する必要があります。

しかし、それを簡単に行うには、最初にファイルからすべての gd コメントを削除する必要があります。これは、ほぼすべての行にコメントが記載されているためです。

この正規表現は、区切り記号を含むすべての C の複数行コメントに一致し、あなたの旅に役立つかもしれません

/\*((?!\*/).)*\*/
于 2014-02-24T13:42:44.533 に答える
0

これは、メイン関数 (abc.m など) を含む実装ファイルがあり、別のmain.m. の main 関数をコメントアウトするとabc.m、プロジェクトは正常にコンパイルされました。

于 2011-02-19T00:32:38.127 に答える
-1

フォルダを削除/Users/{username}/Library/Developer/Xcode/DerivedDataして再度ビルドしてください。

于 2017-10-23T21:49:22.927 に答える