Я использую CppUTest для тестирования кода C, определенного в исходном файле fornol.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
.Но, насколько я понимаю, поиск файлов архива / библиотеки возможен только в том случае, если / когда на данный символ еще не было ссылки.Поэтому не должно быть проблемой, чтобы один и тот же символ определялся более одного раза, при условии, что все определения находятся в файлах архива / библиотеки.
Что я здесь не так делаю?