0

I am currently doing unit testing for a project of c/c++ in eclipse IDE (Version: Luna Service Release 2 (4.4.2)) and I have recently upgraded my cygwin to cygwin64 to make it compatible with c++17 standard and my g++ version is g++ (GCC) 10.2.0, But I am not able to build my testsuites in eclipse, I have set the environment path to "C:\cygwin64\bin", But still I am getting the below error. Could you please help me with the below error: Console output after building my project : make all Building file:

   C:/Accurev/AngioJet_Development_ver1/CS/AngioJet/Firmware/src/ClinicalFeatures/door.cpp
   Invoking: Cygwin C++ Compiler
   g++ -DUNIT_TESTING -        "C:/Accurev/AngioJet_Development_ver1/CS/ut/testsuites/Firmware/hell/../../../../AngioJet/Firmware/build/PicoZed_FSBL_bsp/ps7_cortexa9_0/include" -I"C:/Accurev/AngioJet_Development_ver1/CS/ut/testsuites/Firmware/hell/../../../testsupport/" -I"C:/Accurev/AngioJet_Development_ver1/CS/ut/testsuites/Firmware/hell/../../../testsupport/Source" -I"C:/Accurev/AngioJet_Development_ver1/CS/ut/testsuites/Firmware/hell/../../../../AngioJet/Firmware/src/Platform/Zynq7000" -      I"C:/Accurev/AngioJet_Development_ver1/CS/ut/testsuites/Firmware/hell/../../../../AngioJet/Firmware/src/HostInterface" -I"C:/Accurev/AngioJet_Development_ver1/CS/ut/testsuites/Firmware/hell/../../../../AngioJet/Firmware/soup/treck/6_0_1_56/include" -I"C:/Accurev/AngioJet_Development_ver1/CS/ut/testsuites/Firmware/hell/../../../../Einstein/src/Platform/Zynq7000" -I"C:/Accurev/AngioJet_Development_ver1/CS/ut/testsuites/Firmware/hell/../../../../Einstein/src/Common" -I"C:/Accurev/AngioJet_Development_ver1/CS/ut/testsuites/Firmware/hell/../../../../AngioJet/Firmware/src/Common" -I"C:/Accurev/AngioJet_Development_ver1/CS/ut/testsuites/Firmware/hell/../../../../AngioJet/Firmware/src/ClinicalFeatures" -O0 -g -fprofile-arcs -ftest-coverage -Wall -c -fmessage-length=0 -MMD -MP -MF"src/door.d" -MT"src/door.d" -o "src/door.o" "C:/Accurev/AngioJet_Development_ver1/CS/AngioJet/Firmware/src/ClinicalFeatures/door.cpp"
Finished building: C:/Accurev/AngioJet_Development_ver1/CS/AngioJet/Firmware/src/ClinicalFeatures/door.cpp
 
Building target: helll.exe
Invoking: Cygwin C++ Linker
g++ -fprofile-arcs -o "helll.exe" ./src/door.o   -lgcov -lbfd
/usr/lib/gcc/x86_64-pc-cygwin/10/../../../../x86_64-pc-cygwin/bin/ld: /usr/lib/gcc/x86_64-pc-cygwin/10/../../../../lib/libcygwin.a(libcmain.o): in function `main':
/usr/src/debug/cygwin-3.3.6-1/winsup/cygwin/lib/libcmain.c:37: undefined reference to `WinMain'
collect2: error: ld returned 1 exit status
make: *** [makefile:47: helll.exe] Error 1

07:05:17 Build Finished (took 4s.531ms)
`*

I have uninstalled and reinstalled the softwares. Also I have built a new project from scratch which is building fine but whenever i try to build my project it is not building.

While doing unit testing in eclipse we create the project as c++ project and import the source files mentioned below and the structure is as follow: Source file - door.cpp, door.h door.h:

#include "global.h"

namespace lDOOR { void close( BasicTypes::UInt8 mode ); }

door.cpp:

#include "door.h"

    void lDOOR::close(void)
{
   //Normal Mode
   close(BscMsg::NORMAL);
}

and we do the unit testing for the above functions present in .cpp file in the file created by us door_testsuite.h which is as follows:

#include <cxxtest/TestSuite.h>
class door_TestSuite: public CxxTest::TestSuite {
public:
    void setUp(){}
    void teardown(){}
    void testDoorLDoorClose()
    {
         BscMsg::UInt8 mode = 2;

         lDOOR::close(mode);
      TS_ASSERT_EQUALS();
}};

And when I test the above code in cygwin terminal it executes completely fine.

Neetika
  • 17
  • 2
  • 3
    Do you have a `main` function? Please show a [mre] – Alan Birtles Oct 31 '22 at 11:40
  • No, we only have source files (.h and .cpp) and that particular .cpp file is first build using eclipse to solve any build errors and while building it throws me the above mentioned error, it has come since i have installed latest version of cygwin – Neetika Oct 31 '22 at 12:18
  • `helll.exe` seems to only contain `door.cpp` which has no `main`? – Alan Birtles Oct 31 '22 at 12:31
  • ***Could you please help me with the below*** The error is quite clear, the code has no `int main()` or `WinMain()` with that said its difficult to impossible to help without knowledge of the `AngioJet_Development` software. – drescherjm Oct 31 '22 at 12:47
  • Actually each source file is considered individual unit and the the functions are being tested.So there is no dependency on other files. I haven't faced this issue earlier but it has just started to come now. will there be any eclipse environment changes which are required? – Neetika Nov 01 '22 at 06:09

1 Answers1

-1

This means there is no WinMain function, which is the entry point to Windows windows programs. Yes, confusing. You can choose to either build a program as a console program or windows program. (There are a few other types that are irrelevant) In a console program, the entry point is main (As with the entire world of computing), but in a windows program, it is WinMain. This question has a good answer that goes into depth about it, but you either need to switch the type of program to console, or (If your program is creating and using windows) add a WinMain function.

Sorry if this is confusing, it is difficult to differentiate between Windows, the OS, and windows, the type of program. Also, my knowledge on this subject is all from VSCode, so may be completely or partially incorrect.

TLDR: Either add a WinMain function, or switch to building your program as a windows program.

cs1349459
  • 911
  • 9
  • 27
  • 2
    With MinGW when building an executable by default it searches for `int main()` if that is not found it searches for `WinMain()` if that is not found it gives up and shows an error. – drescherjm Oct 31 '22 at 12:49