I'm using CppUTest to test the C code defined in a fornol.c
source file. That file defines the main production main()
function.
I also have an AllTests.cpp
file that also has a main()
function, but that main()
is supposed to be used only when running the unit tests.
AllTests.cpp
gets compiled to a .o
file, whereas fornol.c
gets compiled to a libfornol.a
archive.
Then CppUTest tries to link everything together, but here is what I get instead:
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
It looks as if the main()
function defined in fornol.c
and present in the archive libfornol.a
conflicts with the main()
defined in AllTests.cpp
. But my understanding was that archive/library files are searched only if/when a given symbol hasn't been referenced yet. It should therefore not be a problem to have the same symbol defined more than once, provided all definitions are in archive/library files.
What am I doing wrong here?