无法针对gobject-2.0进行编译

时间:2012-08-18 02:22:46

标签: c glib gobject

我正在尝试学习gobject系统,所以我阅读了gnome网站上的一些文档,并为GObject创建了一个简单的gobject。每次我想编译时,我都不想继续运行gcc作业,我也想同时学习构建系统。我尝试了autotools,我开始工作到pkg-config搜索gobject-2.0的程度。

要从命令行编译我的项目,我这样做:gcc *.c $(pkg-config --cflags --libs gobject-2.0)(我必须取出格式的额外刻度)。无论如何< ---这个命令有效。

然而:gcc $(pkg-config --cflags --libs gobject-2.0) *.c,它应该是同一个命令,返回:

main.c: In function 'main':
main.c:10:10: warning: initialization from incompatible pointer type [enabled by default]
/tmp/ccxO7wkX.o: In function `main':
main.c:(.text+0x1a): undefined reference to `g_type_init'
main.c:(.text+0x27): undefined reference to `g_type_create_instance'
/tmp/ccPu2beU.o: In function `a_get_type':
myobject.c:(.text+0x57): undefined reference to `g_type_register_static'
collect2: ld returned 1 exit status

是的,这是与另一个命令完全相同的命令。我不知道出了什么问题。以下是autotools / automake的构建方式:

gcc -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include   -g -O2 -lgobject-2.0 -lglib-2.0    -o GObjectTest main.o myobject.o  
main.o: In function `main':
/home/aj/Desktop/GObjectTest/src/main.c:9: undefined reference to `g_type_init'
/home/aj/Desktop/GObjectTest/src/main.c:10: undefined reference to `g_type_create_instance'
myobject.o: In function `a_get_type':
/home/aj/Desktop/GObjectTest/src/myobject.c:19: undefined reference to `g_type_register_static'
collect2: ld returned 1 exit status
make: *** [GObjectTest] Error 1

这是一些古怪的gcc编译事吗?我试过clang也无济于事,这让我觉得这是一个链接器问题?我真的不知道,并希望有人会在那里。这非常令人沮丧。

以下是“违规代码”:

GType a_get_type (void)
{
  if (type == 0) {
    GTypeInfo info = {
      sizeof(AClass),
      NULL,
      NULL,
      (GClassInitFunc) a_class_init,
      NULL,
      NULL,
      sizeof(A),
      0,
      (GInstanceInitFunc) NULL
    };
    type = g_type_register_static (G_TYPE_OBJECT,
                   "AType",
                   &info, 0);
  }

  return type;
}

编辑:这是我的autotools构建的输出,无论如何是make部分:

$ make
make  all-recursive
make[1]: Entering directory `/home/aj/Desktop/GObjectTest'
Making all in src
make[2]: Entering directory `/home/aj/Desktop/GObjectTest/src'
gcc -DHAVE_CONFIG_H -I. -I..    -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include   -g -O2 -MT main.o -MD -MP -MF .deps/main.Tpo -c -o main.o main.c
main.c: In function 'main':
main.c:10:10: warning: initialization from incompatible pointer type [enabled by default]
mv -f .deps/main.Tpo .deps/main.Po
gcc -DHAVE_CONFIG_H -I. -I..    -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include   -g -O2 -MT myobject.o -MD -MP -MF .deps/myobject.Tpo -c -o myobject.o myobject.c
mv -f .deps/myobject.Tpo .deps/myobject.Po
gcc -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include   -g -O2 -lgobject-2.0 -lglib-2.0    -o GObjectTest main.o myobject.o  
main.o: In function `main':
/home/aj/Desktop/GObjectTest/src/main.c:9: undefined reference to `g_type_init'
/home/aj/Desktop/GObjectTest/src/main.c:10: undefined reference to `g_type_create_instance'
myobject.o: In function `a_get_type':
/home/aj/Desktop/GObjectTest/src/myobject.c:19: undefined reference to `g_type_register_static'
collect2: ld returned 1 exit status
make[2]: *** [GObjectTest] Error 1
make[2]: Leaving directory `/home/aj/Desktop/GObjectTest/src'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/aj/Desktop/GObjectTest'
make: *** [all] Error 2

以下是有趣的部分:将gcc -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -g -O2 -lgobject-2.0 -lglib-2.0 -o GObjectTest main.o myobject.o替换为gcc -o GObjectTest main.o myobject.o -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -g -O2 -lgobject-2.0 -lglib-2.0并且它有效。

0 个答案:

没有答案
相关问题