无法 运行 graphics.h 在 windows shell 中编程

Unable to run graphics.h program in windows shell

我正在尝试 运行 通过 Windows shell 上的 gcc 这个程序。 我使用的 GCC 版本:

gcc (i686-posix-dwarf-rev0, Built by MinGW-W64 project) 8.1.0
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

代码:

#include<stdio.h>
#include<graphics.h>
int main(){
    int gd = DETECT, gm;
    initgraph(&gd, &gm, "");
    line(150,150,450,150);
    getch();
    closegraph();
}

起初,它给我这个错误:

fatal error: graphics.h: No such file or directory
     #include<graphics.h>

然后我将 graphics.h 文件添加到我的 gcc 目录中。 但现在它显示此错误:

Gph.C: In function 'int main()':
Gph.C:5:24: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
  initgraph(&gd, &gm, "");
                        ^
C:\Users\simple\AppData\Local\Temp\cchdXkih.o:Gph.C:(.text+0x2e): undefined reference to `initgraph'
C:\Users\simple\AppData\Local\Temp\cchdXkih.o:Gph.C:(.text+0x52): undefined reference to `line'
C:\Users\simple\AppData\Local\Temp\cchdXkih.o:Gph.C:(.text+0x63): undefined reference to `closegraph'
collect2.exe: error: ld returned 1 exit status

有人可以建议 运行 我的程序的替代方法吗?我已经在 Visual Studio 和在线编译器上尝试 运行ning 它。

您可以使用 CodeBlocks IDE。 Link.

或者您也可以使用 TurboC++,但您必须对代码做一些小改动:

#include<stdio.h>
#include<graphics.h>
int main(){
    int gd = DETECT, gm;
    initgraph(&gd, &gm, "C:\TURBOC3\BGI");
    line(150,150,450,150);
    getch();
    closegraph();
}

使用 TurboC++ 的一个优点是您不必将任何额外的文件下载到 运行 您的 graphics.h 程序,这与其他 IDE 如 CodeBlocks 或 DevC++ 不同。

关于

fatal error: graphics.h: No such file or directory
     #include<graphics.h>

graphics.h 不是标准库。在这种情况下,它指的是使用 Windows GDI API.

实现 Borland MS-DOS BGI API 的 WinBGIm

此外,头文件通常不是库,这就是为什么您会收到“未定义引用”错误的原因 - 您必须 link 库本身,而不仅仅是包含头文件。

对于:

Gph.C:5:24: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
  initgraph(&gd, &gm, "");

警告可能很明确,但考虑到您标记了问题 [C],但您使用 .C 而不是 .c 扩展名(小写)命名源代码,则怀疑您是否打算进行 C++ 编译.这会导致在 https://gcc.gnu.org/onlinedocs/gcc/Overall-Options.html 中指定的 C++ 编译。 graphics.h 中未声明参数 const 的事实是常量正确性问题,其中 C 比 C++ 更宽松。作者没有修复它也许令人惊讶。如果您确实使用 C++ 编译,那么您将需要 const_cast 它。

所以你需要:

  • 下载 WInBGIm 库,
  • 将必要的包含文件路径编译器开关 (-I) 添加到我们的构建命令
  • 将必要的 linker 开关添加到 link 库的构建命令中,
  • 将文件扩展名更改为小写的 .c 以便进行 C 编译。