Vala' hello world'示例提供有关g_type_init的警告

时间:2015-11-02 04:58:42

标签: compiler-warnings glib vala

对此"你好世界"找到的示例at the Gnome Wiki Vala Tutorial给了我一个警告。

class Demo.HelloWorld : GLib.Object {

    public static int main(string[] args) {

        stdout.printf("Hello, World\n");

        return 0;
    }
}



/home/scooter3/code/vala/hello_world.vala.c:55:2: warning: ‘g_type_init’ is deprecated (declared at /usr/include/glib-2.0/gobject/gtype.h:667) [-Wdeprecated-declarations]
  g_type_init ();

我想修改程序或安装lib的其他版本以消除警告。

2 个答案:

答案 0 :(得分:1)

正如您已经发现的那样,可以在同一系统上安装多个版本的valac。

您可以使用valac-0.30valac-0.20(等)进行显式编译。您的Linux发行版(显然是Ubuntu)有一个包管理从/usr/bin/valac到其中一个已安装的vala编译器的符号链接。

您所看到的具体警告的说明:

旧版本的glib / gobject(这是Vala使用的基本OOP系统)需要调用g_type_init才能工作,Vala编译器也会尝试保持代码与旧版本兼容。 / p>

您可以使用--target-glib=2.44(或您想要支持的任何最低版本的glib)明确禁用此行为。

但是在较新的valac版本中,使用GLIB_CHECK_VERSION宏修复了此警告,即:

#if !GLIB_CHECK_VERSION (2,35,0)
        g_type_init ();
#endif

如果glib至少是版本2.35,则此检查可以避免调用g_type_init

一般来说,对于C编译器警告:

只有非常简单的Vala程序不会生成C编译器警告,您必须仔细扫描编译器警告的起源(valac或gcc)。通常你只需关心valac输出的警告,而不是你的C编译器(如gcc)的警告。

如果您编写.vapi文件,其中C编译器的警告更重要并且可以指向vapi文件中的错误,则此规则有一个例外。 (vapi文件用于使C库可以访问Vala)。

答案 1 :(得分:0)

我必须先安装vala,因为valac --version提供了

  

Vala 0.20.1

我以为我用

安装了所有东西
sudo add-apt-repository ppa:vala-team 
sudo apt-get install libgee-0.8 vala-0.30 valadoc

但我还需要做

  

sudo apt-get install valac

获取Vala 0.30.0版本的编译器。一旦我这样做,警告消失了。