Unconquerable p 2022-06-01 13:38 采纳率: 90.9%
浏览 280
已结题

C++报错:ld returned 1 exit status

######WinMain报错:C:\Users*****\Desktop\新建文件夹\c++\collect2.exe [Error] ld returned 1 exit status

当我使用DevC++编译器编译代码时报了如上错误。

代码:

#include "windows.h"


//6、处理消息(窗口过程)
    //CALLBACK代表__stdcall参数传递顺序  从右往左依次入栈,并且在函数返回前自动清空堆栈内容
LRESULT CALLBACK WindowProc(
    HWND hwnd,              //消息所属窗口句柄
    UINT uMsg,               //具体消息名称,WM_XXX
    WPARAM wparam,           //键盘附加消息
    LPARAM lparam                //鼠标附加消息
)
{

    switch (uMsg)
    {
    case WM_CLOSE:
        DestroyWindow(hwnd);                //触发WM_DESTROY
        break;
    case WM_DESTROY:
        PostQuitMessage(0);                  //发送退出消息
        break;
    case WM_LBUTTONDOWN:                      //鼠标左键按下消息
    {
        int xPos;
        int yPos;
        xPos = LOWORD(lparam);
        yPos = HIWORD(lparam);
        //打印操作,通常同MessageBox
        TCHAR buf[1024];
        wsprintf(buf, TEXT("x=%d,y=%d"), xPos, yPos);
        //所属窗口、显示内容、标题内容、关联按键类型
        MessageBox(hwnd, buf, TEXT("鼠标按下"), MB_OK);
        break;
    }
    case WM_KEYDOWN:       //键盘消息
        MessageBox(hwnd, TEXT("键盘按下"), TEXT("键盘消息"), MB_OK);
        break;
    case WM_PAINT:     //绘图
    {
        PAINTSTRUCT ps;             //绘图结构体
        HDC hdc = BeginPaint(hwnd, &ps);
        //绘制文字
        TextOut(hdc, 100, 100, TEXT("helloworld"), strlen("helloworld"));
        EndPaint(hwnd, &ps);
        break;
    }
    default:
        break;
    }
    //默认方式处理
    return DefWindowProc(hwnd, uMsg, wparam, lparam);
}


int WINAPI WinMain(
    HINSTANCE hInstance,           //应用程序实例句柄
    HINSTANCE hPrevInstance,       //前一个应用程序实例句柄,在win32环境下基本值NULL,不起作用
    LPSTR lpCmdLine,             //char *argv[]  命令行参数数组
    int nShowCmd)                //窗口显示命令,最大化最小化
{
    //实现底层窗口  6步骤
    //1、设计窗口类
    //2、注册窗口类
    //3、创建窗口类
    //4、显示和更新窗口
    //5、通过循环取消息
    //6、处理消息(窗口过程)
    

    



    //1、设计窗口
    WNDCLASS wc;
    wc.cbClsExtra = 0;//类额外的内存,通常为零
    wc.cbWndExtra = 0;//窗口额外的内存,通常为零
    wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);//设置背景
    wc.hCursor = LoadCursor(NULL, IDC_HAND);//设置光标,如果第一个参数为NULL,代表使用系统提供的默认光标
    wc.hIcon = LoadIcon(NULL, IDI_WARNING);
    wc.hInstance = hInstance;//当前实例句柄,WinMain函数中形参即可
    wc.lpfnWndProc = WindowProc;//窗口过程函数,回调函数,名称可以随便起
    wc.lpszClassName = TEXT("WINDOW");//指定窗口类名
    wc.lpszMenuName = NULL;//菜单名,没有填NULL
    wc.style = 0;//0代表默认风格

    //2、注册窗口类
    RegisterClass(&wc);

    //3、创建窗口
    /*
    lpClassName,    //类名
    lpWindowName,    //窗口名
    dwStyle,        //显示风格  WS_OVERLAPPEDWINDOW
    x, y,\    //创建窗口的起始坐标  CW_USEDEFAULT
    nWidth,nHeight,    //创建窗口默认宽高
    hWndParent,        //父窗口,NULL
    hMenu,       菜单  NULL
    hInstance,    实例句柄,hInstance
    lpParam       其他参数   NULL
    */
    HWND hwnd = CreateWindow(wc.lpszClassName, TEXT("TEXT WINDOW"), WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT ,
        NULL, NULL, hInstance, NULL);
    //4、显示和更新
    ShowWindow(hwnd, SW_SHOWNORMAL);
    UpdateWindow(hwnd);
    //5、通过循环取消息

    /*
    HWND        hwnd;                  //主窗口
    UINT        message;               //消息名称   WM_XXXXX(WINDOW MESSAGE)
    WPARAM      wParam;                //附加消息    键盘
    LPARAM      lParam;                //附加消息    鼠标左右键
    DWORD       time;                  //消息产生时间,
    POINT       pt;                    //附加消息   鼠标   x,y坐标
    */
    MSG msg;
    while(1)
    {
        /*
        参数
        _Out_ LPMSG lpMsg,               消息结构体
        _In_opt_ HWND hWnd,            NULL  捕获所有窗口消息
        _In_ UINT wMsgFilterMin,            过滤最小消息数量
        _In_ UINT wMsgFilterMax             过滤最大消息数量       都写0代表捕获所有消息
        */
        if (GetMessage(&msg, NULL,0,0) == FALSE)
        {
            break;
        }
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return 0;
}

结果:
C:\Users\86158\AppData\Local\Temp\ccZgjR6P.o    zab.cpp:(.text+0x16f): undefined reference to `__imp_TextOutA'
C:\Users\86158\AppData\Local\Temp\ccZgjR6P.o    zab.cpp:(.text+0x1f3): undefined reference to `__imp_GetStockObject'
C:\Users\86158\Desktop\新建文件夹\c++\collect2.exe    [Error] ld returned 1 exit status


我的解答思路和尝试过的方法

尝试过加一个空的main但没有效果

我想要达到的结果

不知道如何能成功创建一个新的窗口并不报错。

  • 写回答

3条回答 默认 最新

  • Master聪 2022-06-01 14:16
    关注

    缺少链接一个lib,建议新手使用visual studio就没那么多问题了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 6月16日
  • 已采纳回答 6月8日
  • 创建了问题 6月1日

悬赏问题

  • ¥45 工程软件单片机设计课题要求
  • ¥15 网络爬虫 在北京新发地抓取数据
  • ¥15 在centos7安装conda
  • ¥15 c#调用yolo3 dll文件获取的数据对不上
  • ¥20 WPF 如何实现多语言,label 和cs(live Charts)中是否都能翻译
  • ¥15 STM32F103上电短路问题
  • ¥15 关于#单片机#的问题:以ATMEGA128或相近型号单片机为控制器设计直流电机调速的闭环控制系统(相关搜索:设计报告|软件设计|流程图)
  • ¥15 打开软件提示错误:failed to get wglChoosePixelFormatARB
  • ¥15 (标签-python|关键词-char)
  • ¥15 python+selenium,在新增时弹出了一个输入框