理解 vala 编译警告

Posted

技术标签:

【中文标题】理解 vala 编译警告【英文标题】:understanding vala compilation warnings 【发布时间】:2013-10-28 09:22:01 【问题描述】:

下面的编译警告对我来说不是很清楚,除了 弃用warhing,但valadoc中方法的签名:

http://valadoc.org/#!api=gstreamer-1.0/Gst

没有显示其他方法签名。

其他警告更加模糊。

max@max-ubuntu:~/mdev/cr valac --pkg gstreamer-0.10 gstpipe.vala /home/max/dev/main-sandbox/cr/gstpipe.vala.c:在函数“application_message”中: /home/max/dev/main-sandbox/cr/gstpipe.vala.c:64:2:警告:传递“_gst_structure_copy0”的参数1会从指针目标类型中丢弃“const”限定符[默认启用] /home/max/dev/main-sandbox/cr/gstpipe.vala.c:26:17:注意:预期为“gpointer”,但参数类型为“const struct GstStructure *” /home/max/dev/main-sandbox/cr/gstpipe.vala.c:82:9:警告:分配从指针目标类型中丢弃“const”限定符[默认启用] /home/max/dev/main-sandbox/cr/gstpipe.vala.c:在函数“main”中: /home/max/dev/main-sandbox/cr/gstpipe.vala.c:173:2:警告:'g_type_init' 已弃用(在 /usr/include/glib-2.0/gobject/gtype.h:669 声明) [-Wdeprecated-declarations] 使用消费税; 无效应用程序消息(Gst.Bus 总线,Gst.Message 消息) var s = msg.get_structure(); 如果(s == null) 返回; 字符串 msgtype = s.get_name(); 如果(msgtype!=“级别”) 返回; GLib.Value rms = s.get_value("rms"); //GLib.Value st = s.get_value("stream-time"); GLib.DateTime 现在 = 新 GLib.DateTime.now_local(); var sec = now.to_unix(); var msec = (sec * 1000) + now.get_microsecond(); var z = rms.strdup_contents(); //z = z.replace("", "[").replace("", "]"); stdout.printf("%ld, %s \n", (long) msec, z); 无效的主要(字符串[] args) Gst.init(参考参数); 尝试 var pipeline = Gst.parse_launch( “pulsesrc 设备=\”alsa_input.usb-046d_08c9_674634A4-02-U0x46d0x8c9.analog-mono\“!”+ "级别名称=wavelevel 间隔=10000000 !" + “wavenc!文件接收器位置=audioz.wav” ); var bus = pipeline.get_bus(); bus.add_signal_watch(); bus.message.connect(application_message); // 设置管道状态为 PLAYING pipeline.set_state (State.PLAYING); // 创建并启动 GLib 主循环 新的 MainLoop ().run (); 捕获(错误 e) print("%s\n", e.message);

【问题讨论】:

【参考方案1】:

在使用 Vala 时,您通常可以忽略来自 C 编译器的警告。 Vala 比 C 编译器有更好的信息,所以当 C 编译器无法知道某些事情时,它知道某些事情是有效的。不幸的是,我们不能随处添加强制转换,因为在某些情况下我们无法生成有效的强制转换(而且,我们无法知道这些情况是什么)。

关于 g_type_init 被弃用的最后一个警告是因为从 glib 2.36 开始不再需要 g_type_init。您可以通过将 --target-glib=2.36(或任何更高版本的 glib)传递给 valac 来消除该警告,但请注意生成的代码可能不再适用于旧版本的 glib。

TBH,我经常只是将 -X -w 传递给 valac 以使 C 编译器安静下来。有时我会错过一个有用的警告,但它消除了许多无用的警告。

【讨论】:

以上是关于理解 vala 编译警告的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Vala 编译器生成 GIR 文件?

如何在 Vala 中导入其他文件?

xmake v2.5.7 发布,包依赖锁定和 Vala/Metal 语言编译支持

理解和解析来自 gcc 的警告

九杂项讨论

Vala的Makefile