我想在Codeblocks中使用C GObject lib来创建类。所以我有两个班:A.h和A.c 但是当我像这样包含gobject lib时:
#include <glib-2.0/gobject/gobject.h>
它给了我一个错误:
Only <glib-object.h> can be included directly.
因为此文件包含以下行:
#if !defined (__GLIB_GOBJECT_H_INSIDE__) && !defined (GOBJECT_COMPILATION)
#error "Only <glib-object.h> can be included directly."
#endif
A.H:
#ifndef A_H
#define A_H
#include <glib-2.0/gobject/gobject.h>
//It's only declaring an class called A
typedef struct _AClass AClass;
typedef struct _A A;
struct _AClass {
//Always Derived from GObjectClass class
GObjectClass parent_instance;
}
struct _A{
//Always Derived from GObject class
GObject parent_instance;
}
#endif // A_H
A.C:
#include "/home/alex/GObject_Tutorial/include/A.h"
//It's defining a class called A
G_DEFINE_TYPE(A, aObj, G_TYPE_OBJECT);
我认为包含这些库的唯一方法是将它们添加到本地文件夹并包含类似(但可能有另一种方式):
#include "gobject.h"
答案 0 :(得分:2)
谢谢。所以我的回答是: 我们不仅包含gobject / gobject.h,因为glib-object.h是聚合器,它包含这些所有库以提供gobject-class的创建。 我的步骤:
1)使用以下命令查找glib中lib的位置:
pkg-config --cflags --libs gobject-2.0
所以,我有结果(在你的情况下可能会有所不同):
-I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -lgobject-2.0 -lglib-2.0
2)然后在code :: blocks Project-&gt; Build Options-&gt; Compiler Settings-&gt; Other Options
3)在文本字段中复制此行(-I / usr / include / glib-2.0 -I / usr / lib64 / glib-2.0 / include)
4)复制到项目 - &gt;构建选项 - &gt;链接器设置 - &gt;此行的其他链接器选项(-lgobject-2.0 -lglib-2.0)
5)构建
6)万岁!它的确有效,感谢大家:)
答案 1 :(得分:1)
您应该按照有用的错误消息而不是尝试解决它。
您不能直接在GLIB之外添加gobject.h
:只有glib-object.h
才能包含在应用程序代码中。
您还应该在包含规则中使用非系统头文件的相对路径:使用编译器和/或IDE中的包含路径设置。