CppUTestを使用して、fornol.c
ソースファイルで定義されたCコードをテストしています。そのファイルは、主要な生産main()
関数を定義します。
関数もあるAllTests.cpp
ファイルもありますが、単体テストを実行する場合にのみ使用することになっています。main()
main()
AllTests.cpp
.o
ファイルにコンパイルされますが、アーカイブfornol.c
にコンパイルされます。libfornol.a
次に、CppUTestはすべてをリンクしようとしますが、代わりに次のようになります。
Linking fornol_tests
cc -o fornol_tests objs/tests/AllTests.o objs/tests/FornolTests.o lib/libfornol.a ../../CppUTest/lib/libCppUTest.a ../../CppUTest/lib/libCppUTestExt.a -lstdc++ -lgcov
lib/libfornol.a(fornol.o): In function `main':
/home/dlindelof/Work/endor/nol/fornol/fornol.c:453: multiple definition of `main'
objs/tests/AllTests.o:/home/dlindelof/Work/endor/nol/fornol/tests/AllTests.cpp:4: first defined here
collect2: ld returned 1 exit status
で定義され、アーカイブに存在するmain()
関数がで定義されたものと競合しているように見えます。しかし、私の理解では、アーカイブ/ライブラリファイルは、特定のシンボルがまだ参照されていない場合にのみ検索されます。したがって、すべての定義がアーカイブ/ライブラリファイルにある場合は、同じシンボルを複数回定義しても問題はありません。fornol.c
libfornol.a
main()
AllTests.cpp
私はここで何が間違っているのですか?