8
votes

I am trying to compile a program which includes the graphics.h header file for C. I have added the graphics.h and winbgim.h header files in the include folder and also libbgi.a to lib folder.

Just for testing, I made a simple hello world program and included the graphics.h header file.

But on compiling I got the following error:

In file included from firstc.c:2:0: c:\mingw\bin../lib/gcc/mingw32/4.7.1/../../../../include/graphics.h:30:59: fatal error: sstream: No such file or directory compilation terminated.

I tried to search in other forums as well, where the same question had been asked, but could not get an answer.

Another question, I came across other graphic options for C and C++ like openGL and DirectX. Should I learn these instead of graphics.h?

5
<graphics.h> is operating system specific. You might consider libsdl or gtk (or in C++ Qt...) since they all probably run on more operating systems. - Basile Starynkevitch
@BasileStarynkevitch : Thanks! As a beginner, which one should I begin with, and also which one would be more beneficial in the long run? - Ayushi Jha
It depends what you want to do with it. My suggestion actually would be to install Linux (most distributions have libsdl,gtk,Qt already) on your machine. Don't forget to enable all warnings and debug info in your compiler (gcc -Wall -Wextra -g) and learn how to use the debugger (gdb) - Basile Starynkevitch
The interesting thing about Linux is that it is mostly (or fully, if you are careful) made of free software whose source code you can study and improve. You'll learn a lot. - Basile Starynkevitch
Take the habit of studying the source code of some free software you are using (perhaps start with your shell, or /bin/ls) ; you'll learn a lot - Basile Starynkevitch

5 Answers

10
votes

graphics.h is a non-standard header. Most likely it refers to the old BGI graphics library of the Turbo C DOS compiler. It will only work on that particular compiler. And of course DOS is a completely obsolete OS nowadays.

If you are interested in 3D graphics programming, then OpenGL and/or DirectX are indeed better, modern alternatives, supported by many compilers.

4
votes

If you try to compile the source code with including “graphics.h” in code::blocks IDE you have to setup winBGIm library.

  • Download WinBGIm from http://winbgim.codecutter.org/ or use (direct link)
  • Extract it.
  • Open graphics.h, go to line 302 change int right=0 to int top=0
  • Copy graphics.h and winbgim.h files in include folder of your compiler directory.
  • Copy libbgi.a to lib folder of your compiler directory
  • In code::blocks open Settings >> Compiler and debugger >> linker settings
  • Click Add button in link libraries part, browse and select libbgi.a file
  • In right part (ie. other linker options) paste commands
    -lbgi -lgdi32 -lcomdlg32 -luuid -loleaut32 -lole32
  • Click Ok

You can also check this video tutorial.

Compiler options

1
votes

When you're compiling a C source code having graphics.h header file, you'll need to change the file extension to .cpp. Without doing that, you'll get “fatal error: sstream : no such file directory” error.

So, simply change the .c extension to .cpp. Here's a step-by-step procedure to compiling graphics.h source code if you're using Code::Blocks to run the code.

1
votes

The sstream error occurs only when you are compiling using gcc not g++ , try using g++ or converting the program to c++ , as far as i know ( since i'm new to this language but i've faced this error before ) so goodluck with that

0
votes

If top answer doesn't work, and you are getting:

  • error: narrowing conversion of 'x' from 'int' to 'short unsigned int'

  • your graphics window just doesn't appear

    following this tutorial and using the bug fixed headers/libraries (winBGIm(bug-free).rar) in the provided winBGIm source link, worked for me in Windows 10.

Mirror to winBGIm(bug-free_.rar)

compiling with: g++ example.cpp -Wall -m32 -std=c++11 -pedantic -g -lbgi -lgdi32 -lcomdlg32 -luuid -loleaut32 -lole32 -o example.exe