【问题标题】:Why does using GetPixel result in an "undefined reference"?为什么使用 GetPixel 会导致“未定义的引用”?
【发布时间】:2011-11-21 13:53:29
【问题描述】:
#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

我正在使用 Dev-C++ 编译器

【问题讨论】:

  • 如何添加 gdi32.lib。嗯,这取决于你的编译器。
  • 从 Dev-C++ 切换到 Code::Blocks,DC++ 已经过时了。
  • @JBL:在项目选项中,尝试添加这一行-lgdi32

标签: c++ windows gdi


【解决方案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

【讨论】:

  • #pragma comment (lib, "gdi32.lib") E:从他的错误输出来看,这看起来不像VS,看起来像Dev Cpp。
  • @Tanner:我不知道你能做到。 :)
  • @Tanner:我认为它只特定于 MSVC++ 编译器。
  • 啊,Dev-C++……好久没用了。你得查一下,因为我不知道。
  • @cpx 哦,亲爱的,你绝对是对的。我的更新将添加 -lgdi32.lib 作为编译器命令。感谢您指出这一点!
【解决方案2】:

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

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

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

完成此操作后,您将能够调用 Win32 API GetPixel。

如果您坚持创建控制台或非 Windows 应用程序,那么您将不得不定义自己的 GetPixel,它可能会直接访问视频内存。

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

【讨论】:

  • 您不需要 WinMain 函数来使用 WinAPI,您认为 File I/O 在控制台应用程序中如何工作?
  • -1,您可以从 Windows 控制台应用程序使用 Win32 API。此类应用程序通常使用 main() 而不是 WinMain。
【解决方案3】:

我收到了这个错误,我通过将 Visual Studio Code 作为我的 IDE 并切换到 Visual Studio 2019 来解决它。 VS19 自动解决了我的依赖错误!我希望这对某人有帮助!

【讨论】:

    猜你喜欢
    • 2016-09-18
    • 2016-07-18
    • 2021-09-01
    • 2018-12-31
    • 2014-10-10
    • 1970-01-01
    • 2015-07-10
    • 2012-01-08
    • 1970-01-01
    相关资源
    最近更新 更多