首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在带cygwin的eclipse中对“`WinMain”的未定义引用(安装程序-x86_64)

在带cygwin的eclipse中对“`WinMain”的未定义引用(安装程序-x86_64)
EN

Stack Overflow用户
提问于 2022-10-31 10:39:43
回答 1查看 66关注 0票数 0

我目前正在eclipse中为c/c++项目(版本:露娜服务第2版(4.4.2))进行单元测试,最近我将我的cygwin升级到cygwin64,使其与c++17标准兼容,并且我的g++版本是g++ (GCC) 10.2.0,但是我无法在eclipse中构建我的测试套件,我已经设置了“C:\cygwin 64\bin”的环境路径,但我仍然会遇到以下错误。请您帮助我处理以下错误:生成我的项目后的控制台输出:生成所有的构建文件:

代码语言:javascript
运行
复制
   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)
`*

我已经卸载并重新安装了这些软件。此外,我已经建立了一个新的项目从零,这是建设罚款,但每当我试图构建我的项目,它不是建设。

在eclipse中进行单元测试时,我们将项目创建为c++项目,并导入下面提到的源文件,其结构如下:源文件- door.cpp,DOONA.h:

代码语言:javascript
运行
复制
#include "global.h"

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

door.cpp:

代码语言:javascript
运行
复制
#include "door.h"

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

我们在由.cpp创建的文件中对.cpp文件中的上述函数进行单元测试,如下所示:

代码语言:javascript
运行
复制
#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();
}};

当我在cygwin终端上测试上面的代码时,它执行的很好。

EN

回答 1

Stack Overflow用户

发布于 2022-10-31 12:44:14

这意味着没有WinMain函数,它是Windows程序的入口点。是的,令人困惑。您可以选择将程序构建为控制台程序或windows程序。在控制台程序中,入口点是main (和整个计算世界一样),但是在windows程序中,它是WinMain。关于This问题有一个很好的答案,但您需要将程序的类型切换到控制台,或者(如果您的程序正在创建和使用windows)添加一个WinMain函数。

很抱歉,如果这让人困惑,那么很难区分Windows、OS和windows (程序类型)。而且,我在这个问题上的知识都来自VSCode,所以可能是完全或部分错误的。

TLDR:要么添加一个WinMain函数,要么切换到将您的程序构建为一个windows程序。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74262036

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档