为什么使用 GetPixel 会导致"undefined reference"?

Why does using GetPixel result in an "undefined reference"?

本文关键字:undefined reference GetPixel 为什么      更新时间:2023-10-16
#include <iostream>
#include <windows.h>
#include <string>
#include <ctime>
#include<stdio.h> 
using namespace std;
int main()
{
    HDC dc = GetDC(NULL); 
    COLORREF color = GetPixel(dc, 10, 10); 
    ReleaseDC(NULL, dc);
    cout << color;
    return 0;
}

错误提示:

[Linker error] undefined reference to `GetPixel@12'   
 ld returned 1 exit status    
[Build Error]  [Project1.exe] Error 1

您需要将Gdi32.lib添加到依赖项列表中。GetPixel()函数不在默认库中。

编辑:

在Visual Studio中,你可以像这样添加依赖项:

菜单:项目->属性->配置属性->链接器->输入

"附加依赖项"选项看起来像这样:

kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)

添加Gdi32.lib

我得到了这个错误,我通过取消Visual Studio Code作为我的IDE并切换到Visual Studio 2019来解决这个问题。VS19自动解决了我的依赖错误!我希望这能帮助到一些人!

为了使用Win32 API,你需要创建一个Windows应用程序。

这意味着使用WinMain函数而不是main()函数。

它还可以(可选)包括创建窗口并使用窗口过程处理窗口消息。

在你这样做之后,你将能够调用Win32 API GetPixel。

如果你坚持创建一个控制台或非windows应用程序,那么你将不得不定义你自己的GetPixel,它可能会直接访问显存。

所以,首先创建一个WinMain函数而不是main()。(当然,您还需要链接到相应的库。)