2

.cpp ソース ファイルに main 関数がある .cpp ソース ファイルからいくつかの関数を使用したいと考えています。(make と gcc でビルドしています。)

Makefile のルールは次のとおりです。

$(CXX) $(CXXFLAGS) $(INCLUDES) $(SRCS) $(LIBS) -o $@

そして、ここに出力があります(気を散らすのを防ぐためにいくつかの名前が変更されています):

$ make foo
g++ -g -Wall -m32 -Ilinux/include foo.cpp bar.cpp -o foo
/tmp/ccJvCgT3.o: In function `main':
/home/dspitzer/stuff/bar.cpp:758: multiple definition of `main'
/tmp/ccUBab2r.o:/home/dspitzer/stuff/foo.cpp:68: first defined here
collect2: ld returned 1 exit status
make: *** [foo] Error 1

foo.cpp からメインを使用したいことを gcc に示すにはどうすればよいですか?

更新:「bar.cpp」は「他の誰かの」コードであり、メインの独自の理由があることを追加する必要がありました。(共有関数を別のファイルに分割するために、他の誰かと協力する必要があるようです。)

4

4 に答える 4

5

あなたができることは、各 main() 関数を#ifdefブロックでラップし、コマンドラインを使用して、関連するメインが使用されるようにするシンボルを定義することです。

#ifdef USE_MAIN1
int main(void)
{

}
#endif

次に、gcc コマンド ラインに次のようなものが追加されていることを確認します。

-DUSE_MAIN1

または、コードを再構築するだけです!

于 2010-06-20T17:16:00.500 に答える
2

どれmainを「メイン」として使用するかは問題ではありません。

関数を再定義することはできません。これは、1 つの定義規則に違反します。あなたができないのと同じように:

void foo(void)
{
    // number one
}

void foo(void)
{
    // number two
}

// two foo's? ill-formed.

複数の をコンパイルしようとすることはできませんmain。他のものを削除する必要があります。

于 2010-06-20T17:13:58.013 に答える
1

最も簡単なのは、2 番目の main(...){ ...} を削除し、残りの関数を保持することです。これで問題は簡単に解決します

于 2010-06-20T17:17:41.353 に答える
1

他の誰かと協力して、共有機能を別のファイルに分割してもらう必要があるようです

まさに、それが最良の選択肢です。mainテスト、異なる製品、またはその他の理由で別々のが必要な場合は、一般的に使用されるコードと を別のmainファイルに分割し、ビルド設定に従って必要なもののみを使用します。

于 2010-06-20T17:46:33.090 に答える