2012-02-23 28 views
1

例WAF項目有一個很好的WAF VALA例如這裏:與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 

回答

1

hello方法不是一個靜態方法,而是一個實例方法,所以你需要創建一個先調用實例,然後調用該方法。

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

如果仍然失敗,嘗試在HELLO-gtk.vala添加using My;

+0

嗯,謝謝你的嘗試。但是該方法被定義爲靜態的。問題不同,我無法找到。 – lzap 2012-03-09 20:19:10

+0

我們在談論同一個文件嗎? http://bazaar.launchpad.net/~asabil/vala/vala-project-template.waf/view/head:/my_lib/my-lib.vala 該方法是在沒有'static'的類的內部定義的關鍵詞。 – eagleoneraptor 2012-03-10 05:18:01

+0

啊我已經從我的項目中刪除了。無論如何,我回到了Autotools。謝謝。 – lzap 2012-03-12 09:59:58