如何在Ubuntu中使用graphics.h?


19

是否有任何基于Linux的支持graphics.h库的编译器?我想实现图形程序,所以请告诉我是否有这样的软件。

如果没有,我该如何使用?


您到底需要知道什么?如果在源文件中放置正确的.. umm ...侦听器,则编译器应该找到所有标头。
Braiam 2014年

@Braiam编译器不会仅仅因为包含头文件就神奇地找到了头文件。首先,显然,该文件需要安装在您的系统上(通常,头文件是*-devLinux发行版中的软件包随附的)-编译器不会为您下载该文件。其次,该头文件必须位于编译器将在其寻找的某个标准位置(例如/usr/include),否则该位置必须-I在命令行上用(for gccg++)指定。另外,您通常需要链接阶段的运行时库(仅标头库除外)...
Malte Skoruppa 2014年

@MalteSkoruppa很好,但是您需要使用它吗?把它放在标题中,不是吗?
Braiam 2014年

@布莱恩·厄尔...你在问什么?看,OP的问题就是这样:为了能够graphic.h在Ubuntu上使用该库,我需要做什么?很清楚 适当的答案将说明需要哪些软件包以及如何安装它们(如现有答案一样),以及在编译时可能需要在命令行上使用哪些参数。
Malte Skoruppa 2014年

@MalteSkoruppa您正在阅读身体吗?
Braiam 2014年

Answers:


31

有多种选项可用于使用Ubuntu进行图形编程。

使用SDL

如果要graphics.h在Ubuntu平台上使用,则需要编译和安装libgraph。它是使用SDL在Linux上实现的turbo c图形API。

它不是很强大,不适合生产质量应用,但是它简单易用,易于学习。

您可以从此处下载。

  1. 首先添加Universe存储库(因为某些必需的软件包在主存储库中不可用):

    sudo add-apt-repository universe
    sudo apt-get update
  2. 第二个安装build-essential和一些其他软件包:

    • 对于18.04之前的版本:

      sudo apt-get install libsdl-image1.2 libsdl-image1.2-dev guile-1.8 \
      guile-1.8-dev libsdl1.2debian libart-2.0-dev libaudiofile-dev \
      libesd0-dev libdirectfb-dev libdirectfb-extra libfreetype6-dev \
      libxext-dev x11proto-xext-dev libfreetype6 libaa1 libaa1-dev \
      libslang2-dev libasound2 libasound2-dev build-essential
    • 对于18.04:从Ubuntu 18.04开始guile-2.0工作,并且libesd0-dev已弃用。为此,您需要添加xenialin中的存储库sources.list

      sudo nano /etc/apt/sources.list

      添加这些行:

      deb http://us.archive.ubuntu.com/ubuntu/ xenial main universe
      deb-src http://us.archive.ubuntu.com/ubuntu/ xenial main universe

      运行sudo apt-get update。然后使用以下命令安装软件包:

      sudo apt-get install libsdl-image1.2 libsdl-image1.2-dev guile-2.0 \
      guile-2.0-dev libsdl1.2debian libart-2.0-dev libaudiofile-dev \
      libesd0-dev libdirectfb-dev libdirectfb-extra libfreetype6-dev \
      libxext-dev x11proto-xext-dev libfreetype6 libaa1 libaa1-dev \
      libslang2-dev libasound2 libasound2-dev
  3. 现在解压缩下载的libgraph-1.0.2.tar.gz文件。

  4. 转到解压缩的文件夹并运行以下命令:

    ./configure
    make
    sudo make install
    sudo cp /usr/local/lib/libgraph.* /usr/lib
  5. 现在,您可以#include<graphics.h>在Ubuntu和程序中的以下行上使用:

    int gd=DETECT,gm; 
    initgraph(&gd,&gm,NULL);

这是使用的示例程序graphics.h

/*  demo.c */
#include <graphics.h>

int main()
{
   int gd = DETECT,gm,left=100,top=100,right=200,bottom=200,x= 300,y=150,radius=50;
   initgraph(&gd,&gm,NULL);
   rectangle(left, top, right, bottom);
   circle(x, y, radius);
   bar(left + 300, top, right + 300, bottom);
   line(left - 10, top + 150, left + 410, top + 150);
   ellipse(x, y + 200, 0, 360, 100, 50);
   outtextxy(left + 100, top + 325, "C Graphics Program");

   delay(5000);
   closegraph();
   return 0;
}
  • 编译使用

    gcc demo.c -o demo -lgraph
  • 运行类型

    ./demo

演示1的输出

使用OpenGL(通过GLUT)

尽管OpenGL基本上是为3D编程而制作的,但是绘制2D形状给出了OpenGL的基本轮廓和介绍,并给出了有关如何在OpenGL中开始绘制对象的想法。

  • 要安装GLUT,请打开终端并输入sudo apt-get install freeglut3-dev
  • 这是一个使用GLUT的简单图形程序
/*  demo.c */
#include <GL/gl.h>
#include <GL/glut.h>
#include <GL/glu.h>

void setup() {   glClearColor(1.0f, 1.0f, 1.0f, 1.0f); }

void display()
   {
      glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
      glColor3f(0.0f, 0.0f, 0.0f);
      glRectf(-0.75f,0.75f, 0.75f, -0.75f);
      glutSwapBuffers();
   }

int main(int argc, char *argv[])
  {
     glutInit(&argc, argv);
     glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE);
     glutInitWindowSize(800,600);
     glutCreateWindow("Hello World");

     setup();
     glutDisplayFunc(display);
     glutMainLoop();
     return 0;
  }
  • 使用它编译

    gcc demo.c -o demo -lglut -lGL

  • 使用运行它

    ./演示

演示2的输出


1
我正在使用SDL,但我也做了所有说明,也安装了libgraph,但是程序运行后,它暂停并突然出现错误[xcb]处理队列时出现未知序列号
Luzan Baral 2014年

您正在使用哪个版本的Ubuntu?
g_p

我正在使用ubuntu 14.04
Luzan Baral 2014年

@LuzanBaral,GTK似乎有问题,但是您仍然可以运行该程序。
g_p 2015年

1
有关使用SDL安装libgraph时遇到的错误,请参阅askubuntu.com/a/995265/719469askubuntu.com/a/717262/719469(将节省很多时间,以个人经验说:P)
Kewal Shah

2

如果要在ubuntu或任何其他Linux发行版中使用graphics.h,则我更喜欢libxbgi。对于Windows,它几乎可以完成您对graphics.h的期望。您可以从此处下载:http : //libxbgi.sourceforge.net/

否则,如果您要制作一些高端图形,则可以使用SDL(主要用于视频游戏编程)和OpenGL(用于3D图形)。您也可以将两者混合使用。一个例子是游戏briquolo(拼写可能是错误的)。

快乐的图形编程!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.