Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Linux : Glib was not found

Tags:

c

linux

I have a sample C project that use GLib Library. In that source code, it use :

#include <glib.h>

When I compile, I found this error : "Glib.h : no such file or folder". I have google and find out that I should install this lib. So I use those command:

apt-get install libgtk2.0-dev
apt-get install glade

After that, I have checked and see already exist this header file in my system: usr/include/glib-2.0/glib.h But when I compile, I still meet problem above.

So I have change include line to :

#include <glib-2.0/glib.h>

So, after that, when I compile, I meet error inside glib.h header :

#ifndef __G_LIB_H__
#define __G_LIB_H__

#define __GLIB_H_INSIDE__

#include <glib/galloca.h>
#include <glib/garray.h>
// more code here

glib/galloca.h : no such file or directory. Because this error is inside system header file, I cannot modify anymore and still cannot compile.

I don't know how to fix this. I have read some post, that they change makefile. But, because my project is compiled automatically by IDE (CodeBlock) and I cannot really write a makefile, so that method doesn't suitable for me.

Please tell me a way to fix this.

Thanks :)

like image 913
hqt Avatar asked Feb 19 '14 19:02

hqt


People also ask

What package is GLib h in?

glib. h is part of libglib2. 0-dev package. So in Ubuntu or Debian-based environment, make sure to install this package.

What is GLib Linux?

GLib is a general-purpose, portable utility library, which provides many useful data types, macros, type conversions, string utilities, file utilities, a mainloop abstraction, and so on. Version. 2.72. Authors. GTK Development Team.


2 Answers

There must be some problem with how you build. To compile C programs that use GLib, you need package libglib2.0-dev. You can either install it directly, or install libgtk2.0-dev, which pulls it in as a dependency. So you have the packages you need.

The correct way to compile a GLib program is to use -I with the path to the GLib include files. An example (from How to compile a helloworld GLib program? on askubuntu):

gcc $(pkg-config --cflags --libs glib-2.0) hello_glib.c

This should let you compile this program:

#include <stdio.h>
#include <glib.h>
int main(int argc, char** argv) {
     GList* list = NULL;
     list = g_list_append(list, "Hello world!");
     printf("The first item is '%s'\n", g_list_first(list)->data);
     return 0;
}

The errors you are getting indicate that you are not setting the include path (-I) correctly. How to do this depends on your build system/IDE.


In Code::Blocks, you must set the include path and the linker options in the appropriate configuration dialog. Run pkg-config --cflags --libs glib-2.0, which will output something like

-I/usr/include/glib-2.0 -I/usr/lib/i386-linux-gnu/glib-2.0/include  -lglib-2.0  

The directories after -I must be set in the compiler options of your project (should be under Project -> Build Options -> Search Directories), and the names after -l must be set in the linker settings. Another option is to create a Makefile, and let Code::Blocks use that.

See e.g. Q: What do I need to know when using 3rd party libs? in the Code::Blocks Wiki.

like image 71
sleske Avatar answered Sep 25 '22 08:09

sleske


You should not alter your source code (e.g. the #include directives).

You just need to use pkg-config (both for compiling, with --cflags, and for linking, with --libs), preferably with a builder program like make.

This is an example for exactly your situation: a Makefile using pkg-config to compile some source program using glib

like image 41
Basile Starynkevitch Avatar answered Sep 25 '22 08:09

Basile Starynkevitch