Here are the steps that I used.
- In order to include graphics.h header file, you need to install libgraph package.
- Search the source code for “libgraph”. Install by using commands,./configuremakemake install
- Sometimes, you may get error message “configure: error: *** SDL version x.x.x not found!”. You can solve this by installing “apt-get install libsdl1.2-dev”.
- Sometimes, you may get error message “configure: cannot find guile-config; is Guile installed?”. You can solve this by installing “sudo apt-get install guile guile-dev”.
- Sometimes, you may get error message “SDL_image-x-xx-x not found”. You may install by searching sourcecode “SDL_image” and following commands “./cofigure make make install”.
- When I tried to compile a C file, I got error message,vksalian@vksalian-laptop:~/Desktop$ gcc vvv.c -o vvv -lSDL -lSDL_imageIn file included from /usr/local/include/grtext.h:26,from /usr/local/include/graphics.h:116,from vvv.c:8:/usr/local/include/SDL/SDL_image.h:28:17: error: SDL.h: No such file or directory/usr/local/include/SDL/SDL_image.h:29:25: error: SDL_version.h: No such file or directory/usr/local/include/SDL/SDL_image.h:30:24: error: begin_code.h: No such file or directory/usr/local/include/SDL/SDL_image.h:134:24: error: close_code.h: No such file or directory
- sudo apt-get install libsdl-image1.2-dev freetype, libsdl1.2, libsdl1.2-dev, libsdl-image1.2-dev, and libsdl-image1.2.
- Copy header files with command “sudo cp /usr/local/lib/libgraph.* /usr/lib”
- Then changed the arguiments to compile the C Program and the command looks like (all libraries included),gcc -g -Wall -I/usr/include/SDL -I/usr/local/include/SDL -I/usr/local/include -D_GNU_SOURCE=1 -D_REENTRANT -L/usr/lib -lSDL -I/usr/local/include/SDL -lSDL -lSDL_image -I/usr/local/include -lgraph -o vvv vvv.c
- Please note the below point.`sdl-config –cflags` & `sdl-config –libs` can replaced for -I/usr/include/SDL -I/usr/local/include/SDL -I/usr/local/include -D_GNU_SOURCE=1 -D_REENTRANT -L/usr/lib -lSDL -I/usr/local/include/SDL -lSDL -lSDL_image -I/usr/local/include
- Sample C Program I used to test this,#include#include#includevoid main(){int gd,gm=VGAMAX;int a;gd=DETECT;initgraph(&gd,&gm,NULL);line(200,200,100,100);scanf("%d",&a);return 0;}
- You may use the article below (for more details).Ive read and pondered upon lots of blogs and posts regarding the topics "20xx is the year of the linux desktop" , "linux is not yet ready for the desktop" etc etc.I guess the answer to all such questions is personal in nature. I mean id say "try and find out". I started using a GNU/Linux distribution about 8 months ago. Since then my aim was to do whatever stuff i was doing on XP, on GNU/Linux and maybe find stuff i couldnt do on XP. Thats how i approached/read about GNU/Linux though i later found out that, that approach isn't exactly right, as i was merely "reducing" GNU/Linux to a windows replacement, while its actually a whole another approach to computing.
Anyways, since i joined engineering if there was one thing i didnt like at all, then it was the "Blue Screen Of Death" or the Turbo C interface. Since s3 i never used Turbo C at home. I've always preferred Visual Studio or Dev C++ over Turbo C. I just didnt like the interface. This dislike of turbo C didnt however hamper my coding functionalities in other IDE's as they always had what i wanted. After moving to GNU/Linux i was able to do the same programs and compile them using G++. But s7 is were the problem starts. Now i gotta "computer graphics" lab which makes extensive use of the "graphics.h" library. I had heard rumours earlier that it wasnt available in all IDE's and to my dismay i found out that it wasnt there in GNU/Linux either. Another problem was that since the functions it included involved direct access to the hardware merely copying the graphics.h header to the library folders wouldnt help. As always google helped. Stumbled upon the blog of a person who was in the same situation as I am and he had found a solution. The answer to my problem was a set of libraries called libgraph which wraps around the SDL API.
His blog did contain steps to install in debian but it didnt work for me coz of minor hiccups. SO i spent sometime and finally succeeded in getting it to work on my ubuntu feisty install. I just thought i'd post it here so that google drops this in front of another seeker :)
Step 1: Installing dependencies
run sudo apt-get install build-essential to make sure you have installed all necessary compiler tools
Now comes the real achy part. Open synaptic and install the following packages
libsdl-image1.2
libsdl-image1.2-dev
guile-1.8
guile-1.8-dev
libsdl1.2debian-arts
libartsc0-dev
libaudiofile-dev
libesd0-dev
libdirectfb-dev
libdirectfb-extra
libfreetype6-dev
libxext-dev
x11proto-xext-dev
libfreetype6(upgrade)
libaa1
libaa1-dev
libslang2-dev
libasound2
libasound-dev
You can install them in a single go by adding all the above package names(separated by a black space) to the end of sudo apt-get install Even if it asks you to uninstall some already installed stuff, tell it to proceed. After all this is over. Download this file onto your home folder: libgraph-1.0.1
Right click on the file u just downloaded and click "Extract here"
open terminal and navigate into the folder u just extracted the file contents into by running cd libgraph-1.0.1
Now run the following commands one after the another. Proceed to the next command only if the preceding command executes without any errors.
./configure
sudo make
make install
If you get any errors during the "sudo make" step, paste it in the comments section of this post.
Now technically install is over. Try writing a simple program including graphics.h. Declare the values of gd and gm and call initgraph as follows
int gd,gm=VGAMAX; gd=DETECT;initgraph(&gd,&gm,NULL);
and when compiling using g++ add an extra paramter -lgraph
i.e if you are compiling a program dda.cpp in the terminal u type in
g++ dda.cpp -o dda.o -lgraph
And execute the program by runnung ./dda.o
If on compile it gives u an error that says "could not load shared libraries" or something like that just run the following command and it should fix it
sudo cp /usr/local/lib/libgraph.* /usr/lib
I also read somewhere that graphics.h dosen't have ANY practical use in today's world and that its only "use" now is to help students learn to apply different algorithm's they have to study in a paper called "Computer Graphics"
Great !
ReplyDeleteMakefile:934: warning: overriding commands for target `libgraph.pc'
ReplyDeleteMakefile:409: warning: ignoring old commands for target `libgraph.pc'
if /bin/bash ./libtool --mode=compile gcc -DHAVE_CONFIG_H -I. -I. -I. -I. -g -O2 -I/usr/include/SDL -D_GNU_SOURCE=1 -D_REENTRANT -DFONTDIR=\""/usr/local/share/libgraph/Font/"\" -g -O2 -I/usr/include/SDL -D_GNU_SOURCE=1 -D_REENTRANT -MT guile-libgraph.lo -MD -MP -MF ".deps/guile-libgraph.Tpo" -c -o guile-libgraph.lo guile-libgraph.c; \
then mv -f ".deps/guile-libgraph.Tpo" ".deps/guile-libgraph.Plo"; else rm -f ".deps/guile-libgraph.Tpo"; exit 1; fi
gcc -DHAVE_CONFIG_H -I. -I. -I. -I. -g -O2 -I/usr/include/SDL -D_GNU_SOURCE=1 -D_REENTRANT -DFONTDIR=\"/usr/local/share/libgraph/Font/\" -g -O2 -I/usr/include/SDL -D_GNU_SOURCE=1 -D_REENTRANT -MT guile-libgraph.lo -MD -MP -MF .deps/guile-libgraph.Tpo -c guile-libgraph.c -fPIC -DPIC -o .libs/guile-libgraph.o
guile-libgraph.c:25:22: fatal error: libguile.h: No such file or directory
compilation terminated.
make[2]: *** [guile-libgraph.lo] Error 1
make[2]: Leaving directory `/home/prince/libgraph-1.0.2'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/prince/libgraph-1.0.2'
make: *** [all] Error 2
Please tell how to solve this.
Make sure you have did : sudo apt-get install guile guile-dev
DeleteThe modern ubuntu OS (14.04)has a different version of guile 2.0. So the command will be : sudo apt-get install guile-2.0-dev
Note : The path of guile installed will be different and hence the libguile.h may not be accessible for the make command. To solve this, I just created symbolic links to those header files as below,
sudo ln -s /usr/include/guile/2.0/libguile /usr/include/libguile
sudo ln -s /usr/include/guile/2.0/libguile.h /usr/include/
It works! I just use the 2 symbolic links and it works. Thank you Vijay Salian. Good Work.
DeleteSearch for "guile" under synaptic package manager and install the associated files. Also, re-check if "libgc-dev" and "guile-2.0-dev" are installed properly.
ReplyDeleteThis should solve above error.
Any Sol'n for this :
ReplyDeleteharvardboy95@ubuntu:~/Desktop/Programs$ gcc heart.c -o heart -lgraph
harvardboy95@ubuntu:~/Desktop/Programs$ ./heart
./heart: error while loading shared libraries: libgraph.so.1: cannot open shared object file: No such file or directory
Hello Kirtan,
ReplyDeleteTry this link : http://zaher14.blogspot.in/2007/01/graphicsh-in-linux.html
i got an error while configure
ReplyDeletechecking for gawk... (cached) mawk
checking target system type... i686-pc-linux-gnu
checking for sdl-config... /usr/bin/sdl-config
checking for SDL - version >= 1.2.0... yes
checking SDL ==> SDL_image library... configure: error: *** SDL_image not found
Try This : sudo apt-get install libsdl-image1.2-dev
DeleteMakefile:781: warning: overriding commands for target `libgraph.pc'
ReplyDeleteMakefile:333: warning: ignoring old commands for target `libgraph.pc'
Making install in doc
make[1]: Entering directory `/home/ajay/libgraph-1.0.1/doc'
Making install in man
make[2]: Entering directory `/home/ajay/libgraph-1.0.1/doc/man'
make[3]: Entering directory `/home/ajay/libgraph-1.0.1/doc/man'
make[3]: Nothing to be done for `install-exec-am'.
/bin/bash ../../mkinstalldirs /usr/local/man/man1
mkdir -p -- /usr/local/man/man1
mkdir: cannot create directory ‘/usr/local/man/man1’: Permission denied
make[3]: *** [install-man1] Error 1
make[3]: Leaving directory `/home/ajay/libgraph-1.0.1/doc/man'
make[2]: *** [install-am] Error 2
make[2]: Leaving directory `/home/ajay/libgraph-1.0.1/doc/man'
make[1]: *** [install-recursive] Error 1
make[1]: Leaving directory `/home/ajay/libgraph-1.0.1/doc'
make: *** [install-recursive] Error 1
ajay@binu:~/libgraph-1.0.1$
I'm getting same error. please reply asap
DeleteHi Virad,
DeleteWhat I can see is you have called "make install" command. But in order to install the compiled package you need to be super user. Try "sudo make install" or just "make install" as ROOT.
Hi Virad,
ReplyDeleteWhat I can see is you have called "make install" command. But in order to install the compiled package you need to be super user. Try "sudo make install" or just "make install" as ROOT.
graph.cpp:(.text+0x32): undefined reference to `initgraph'
ReplyDeletegraph.cpp:(.text+0x37): undefined reference to `cleardevice'
graph.cpp:(.text+0xf8): undefined reference to `grgetch'
graph.cpp:(.text+0xfd): undefined reference to `closegraph'
The above problems can be solved by " sudo apt-get install guile-2.0-dev"
cp: cannot stat '/usr/local/lib/libgraph.*': No such file or directory
ReplyDelete