【问题标题】:Example waf project with vala带有 vala 的示例 waf 项目
【发布时间】:2012-02-23 22:04:42
【问题描述】:

这里有一个很好的 waf vala 示例:

https://code.launchpad.net/~asabil/vala/vala-project-template.waf

它在 vala 中显示了一个库和一个应用程序。不幸的是,这个例子中的程序实际上并没有使用这个库(它定义了方法“hello”)。当我尝试从程序中调用它时,出现编译错误。

我无法修改 wscript 以正确加载库。这里的诀窍是什么?谢谢。

我添加的是程序中的这一行:

My.Lib.hello();

但它不会编译:

Waf: Entering directory `/home/lzap/work/shellmail/TEST/vala-template/_build_'
[1/6] valac: src/hello-gtk.vala -> _build_/default/src/hello-gtk.c
../src/hello-gtk.vala:16.9-16.10: error: The name `My' does not exist in the context of `Sample.create_widgets._lambda0_'
Waf: Leaving directory `/home/lzap/work/shellmail/TEST/vala-template/_build_'
Build failed:  -> task failed (err #1): 
    {task: valac_task hello-gtk.vala -> hello-gtk.c}

我想我需要更改程序 wscript:

#!/usr/bin/env python
def build(bld):
    prog = bld(features='cc cprogram')
    # symbolic name used to reference this object
    prog.name = 'hello-gtk.program'
    # name of the resulting program
    prog.target = 'hello-gtk'
    prog.source = 'hello-gtk.vala'
    # libraries to link against
    prog.uselib = 'GTK+'
    # Vala packages to use
    prog.packages = 'gtk+-2.0'
    # Extra vapi dirs
    #prog.vapi_dirs = '../my_lib'
    # Enable threading
    #prog.threading = True

【问题讨论】:

    标签: linux gcc vala waf


    【解决方案1】:

    hello方法不是静态方法,而是实例方法,所以需要先创建My.Lib实例,然后调用该方法。

    var obj = new My.Lib();
    obj.hello();
    

    如果仍然失败,请尝试在 hello-gtk.vala 上添加 using My;

    【讨论】:

    • 嗯,谢谢你的尝试。但是该方法是静态定义的。问题不一样,找不到我的。
    • 我们谈论的是同一个文件吗? bazaar.launchpad.net/~asabil/vala/vala-project-template.waf/… 该方法是在没有static 关键字的类内部定义的。
    • 啊,我已经从我的项目中删除了它。无论如何,我迁移回 Autotools。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2014-02-05
    • 1970-01-01
    • 2023-03-10
    • 2011-04-23
    • 2011-01-26
    • 2012-01-14
    • 1970-01-01
    • 2010-12-20
    相关资源
    最近更新 更多