c - 尝试使用 pdcurses 扩展库时出现与 gdi32 相关的错误

标签 c mingw codeblocks gdi pdcurses

规范:

操作系统:Windows 7

IDE:代码块

编译器:GNU GCC 编译器

图书馆:PDCurses-extended

库构建平台:使用位于 PDCurses-master\wingui 中的 Makefile.mng 的 WinGUI(Windows 图形模式)

<小时/>

问题:

安装并链接 PDCurses 扩展库后,我尝试编译并运行一个简单的 Hello World 程序来检查一切是否设置正确:

#include <curses.h>

int main(){

    initscr();                  /* Start curses mode */
    printw("Hello World !!!");  /* Print Hello World */
    refresh();                  /* Print it on to the real screen */
    getch();                    /* Wait for user input */
    endwin();                   /* End curses mode */

    return 0;
}

但是在尝试编译代码后,我收到以下错误:

||=== Build: Debug in pdcurs_test (compiler: GNU GCC Compiler) ===|
C:\Program Files (x86)\CodeBlocks\PDCurses-master\wingui\pdcurses.a(pdcscrn.o):pdcscrn.c|| undefined reference to `GetStockObject@4'|
C:\Program Files (x86)\CodeBlocks\PDCurses-master\wingui\pdcurses.a(pdcscrn.o):pdcscrn.c|| undefined reference to `SelectObject@8'|
C:\Program Files (x86)\CodeBlocks\PDCurses-master\wingui\pdcurses.a(pdcscrn.o):pdcscrn.c|| undefined reference to `GetStockObject@4'|
C:\Program Files (x86)\CodeBlocks\PDCurses-master\wingui\pdcurses.a(pdcscrn.o):pdcscrn.c|| undefined reference to `SelectObject@8'|
C:\Program Files (x86)\CodeBlocks\PDCurses-master\wingui\pdcurses.a(pdcscrn.o):pdcscrn.c|| undefined reference to `SelectObject@8'|
C:\Program Files (x86)\CodeBlocks\PDCurses-master\wingui\pdcurses.a(pdcscrn.o):pdcscrn.c|| undefined reference to `Rectangle@20'|
C:\Program Files (x86)\CodeBlocks\PDCurses-master\wingui\pdcurses.a(pdcscrn.o):pdcscrn.c|| undefined reference to `Rectangle@20'|
C:\Program Files (x86)\CodeBlocks\PDCurses-master\wingui\pdcurses.a(pdcscrn.o):pdcscrn.c|| undefined reference to `GetStockObject@4'|
C:\Program Files (x86)\CodeBlocks\PDCurses-master\wingui\pdcurses.a(pdcscrn.o):pdcscrn.c|| undefined reference to `SelectObject@8'|
C:\Program Files (x86)\CodeBlocks\PDCurses-master\wingui\pdcurses.a(pdcscrn.o):pdcscrn.c|| undefined reference to `GetTextMetricsW@8'|
C:\Program Files (x86)\CodeBlocks\PDCurses-master\wingui\pdcurses.a(pdcscrn.o):pdcscrn.c|| undefined reference to `SelectObject@8'|
C:\Program Files (x86)\CodeBlocks\PDCurses-master\wingui\pdcurses.a(pdcscrn.o):pdcscrn.c|| undefined reference to `DeleteObject@4'|
C:\Program Files (x86)\CodeBlocks\PDCurses-master\wingui\pdcurses.a(pdcscrn.o):pdcscrn.c|| undefined reference to `SelectObject@8'|
C:\Program Files (x86)\CodeBlocks\PDCurses-master\wingui\pdcurses.a(pdcscrn.o):pdcscrn.c|| undefined reference to `GetTextMetricsW@8'|
C:\Program Files (x86)\CodeBlocks\PDCurses-master\wingui\pdcurses.a(pdcscrn.o):pdcscrn.c|| undefined reference to `SelectObject@8'|
C:\Program Files (x86)\CodeBlocks\PDCurses-master\wingui\pdcurses.a(pdcscrn.o):pdcscrn.c|| undefined reference to `DeleteObject@4'|
C:\Program Files (x86)\CodeBlocks\PDCurses-master\wingui\pdcurses.a(pdcdisp.o):pdcdisp.c|| undefined reference to `DeleteObject@4'|
C:\Program Files (x86)\CodeBlocks\PDCurses-master\wingui\pdcurses.a(pdcdisp.o):pdcdisp.c|| undefined reference to `CreateFontIndirectW@4'|
C:\Program Files (x86)\CodeBlocks\PDCurses-master\wingui\pdcurses.a(pdcdisp.o):pdcdisp.c|| undefined reference to `ChooseFontW@4'|
C:\Program Files (x86)\CodeBlocks\PDCurses-master\wingui\pdcurses.a(pdcdisp.o):pdcdisp.c|| undefined reference to `CommDlgExtendedError@0'|
C:\Program Files (x86)\CodeBlocks\PDCurses-master\wingui\pdcurses.a(pdcdisp.o):pdcdisp.c|| undefined reference to `SetTextColor@8'|
C:\Program Files (x86)\CodeBlocks\PDCurses-master\wingui\pdcurses.a(pdcdisp.o):pdcdisp.c|| undefined reference to `SetBkColor@8'|
C:\Program Files (x86)\CodeBlocks\PDCurses-master\wingui\pdcurses.a(pdcdisp.o):pdcdisp.c|| undefined reference to `SelectObject@8'|
C:\Program Files (x86)\CodeBlocks\PDCurses-master\wingui\pdcurses.a(pdcdisp.o):pdcdisp.c|| undefined reference to `ExtTextOutW@32'|
C:\Program Files (x86)\CodeBlocks\PDCurses-master\wingui\pdcurses.a(pdcdisp.o):pdcdisp.c|| undefined reference to `CreatePen@12'|
C:\Program Files (x86)\CodeBlocks\PDCurses-master\wingui\pdcurses.a(pdcdisp.o):pdcdisp.c|| undefined reference to `SelectObject@8'|
C:\Program Files (x86)\CodeBlocks\PDCurses-master\wingui\pdcurses.a(pdcdisp.o):pdcdisp.c|| undefined reference to `MoveToEx@16'|
C:\Program Files (x86)\CodeBlocks\PDCurses-master\wingui\pdcurses.a(pdcdisp.o):pdcdisp.c|| undefined reference to `LineTo@12'|
C:\Program Files (x86)\CodeBlocks\PDCurses-master\wingui\pdcurses.a(pdcdisp.o):pdcdisp.c|| undefined reference to `MoveToEx@16'|
C:\Program Files (x86)\CodeBlocks\PDCurses-master\wingui\pdcurses.a(pdcdisp.o):pdcdisp.c|| undefined reference to `LineTo@12'|
C:\Program Files (x86)\CodeBlocks\PDCurses-master\wingui\pdcurses.a(pdcdisp.o):pdcdisp.c|| undefined reference to `SelectObject@8'|
C:\Program Files (x86)\CodeBlocks\PDCurses-master\wingui\pdcurses.a(pdcdisp.o):pdcdisp.c|| undefined reference to `DeleteObject@4'|
C:\Program Files (x86)\CodeBlocks\PDCurses-master\wingui\pdcurses.a(pdcdisp.o):pdcdisp.c|| undefined reference to `SelectObject@8'|
C:\Program Files (x86)\CodeBlocks\PDCurses-master\wingui\pdcurses.a(pdcdisp.o):pdcdisp.c|| undefined reference to `MoveToEx@16'|
C:\Program Files (x86)\CodeBlocks\PDCurses-master\wingui\pdcurses.a(pdcdisp.o):pdcdisp.c|| undefined reference to `LineTo@12'|
C:\Program Files (x86)\CodeBlocks\PDCurses-master\wingui\pdcurses.a(pdcdisp.o):pdcdisp.c|| undefined reference to `MoveToEx@16'|
C:\Program Files (x86)\CodeBlocks\PDCurses-master\wingui\pdcurses.a(pdcdisp.o):pdcdisp.c|| undefined reference to `LineTo@12'|
C:\Program Files (x86)\CodeBlocks\PDCurses-master\wingui\pdcurses.a(pdcdisp.o):pdcdisp.c|| undefined reference to `MoveToEx@16'|
C:\Program Files (x86)\CodeBlocks\PDCurses-master\wingui\pdcurses.a(pdcdisp.o):pdcdisp.c|| undefined reference to `LineTo@12'|
C:\Program Files (x86)\CodeBlocks\PDCurses-master\wingui\pdcurses.a(pdcdisp.o):pdcdisp.c|| undefined reference to `DeleteObject@4'|
||error: ld returned 1 exit status|
||=== Build failed: 41 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|

在网上搜索解决方案后,我发现我必须在链接器选项中使用 -lgdi32 链接 gdi32 库,但这似乎不起作用。我还尝试使用包含 windows.h 库

#include <windows.h>

在代码的开头,但再次无济于事。

<小时/>

我是否能够使用 C 来使用 Windows GUI,还是需要使用 C++?

生成错误是因为我在制作 Makefile 时犯了错误,或者链接库时犯了错误,我是否需要安装另一个库,或者只是我仍然不知道?

感谢所有建议。

最佳答案

我已经解决了我自己的问题。

我错误地链接了 gdi32 库。

对于遇到同样问题的人,请访问:

设置 > 编译器 > 链接器设置 > 链接库 > 添加 >

并找到libgdi32.a(我的位于C:\Program Files (x86)\CodeBlocks\MinGW\lib)

关于c - 尝试使用 pdcurses 扩展库时出现与 gdi32 相关的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57432643/

相关文章:

c - 删除 C 结构中指针的常量性

c++ - 使用 MinGW 下载 Qt

c - 如何在 Mac 上设置 Code::Blocks 的工作目录?

c++ - CodeBlocks C++ 输出文件

python - C 扩展模块中的 printf 比 python 中的 writelines 更快吗?

c - C 中的多行输入 - 疑难解答

c++ - 删除向上转换为基指针的对象数组

c++ - -O1/2/3 与 -std=c++1y/11/98 - 如果包含 <cmath> 我收到错误 : '_hypot' was not declared in this scope

c++ - 代码块和 OpenGL

Cygwin 异常 : open stack dump file