2010-06-09 62 views
0

我正在使用ubuntu系統。我的目標是基本上使用TCL/TK的GUI工具製作C語言IDE。我安裝了tcl 8.4,tk8.4,tcl8.4-dev,tk8.4-dev,並在我的系統中安裝了tk.h和tcl.h頭文件。但是,當我運行一個基本的Hello World程序時,它顯示出很多錯誤。包括c程序中的tk.h和tcl.h

#include "tk.h" 
#include "stdio.h" 
void hello() { 
    puts("Hello C++/Tk!"); 
} 
int main(int, char *argv[]) 
{ 
    init(argv[0]); 
    button(".b") -text("Say Hello") -command(hello); 
    pack(".b") -padx(20) -pady(6); 
} 

有些錯誤是

tkDecls.h:644: error: expected declaration specifiers before ‘EXTERN’ 

/usr/include/libio.h:488: error: expected ‘)’ before ‘*’ token 

In file included from tk.h:1559, 
       from new1.c:1: 
tkDecls.h:1196: error: storage class specified for parameter ‘TkStubs’ 
tkDecls.h:1201: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token 

/usr/include/stdio.h:145: error: storage class specified for parameter ‘stdin’ 

tk.h:1273: error: declaration for parameter ‘Tk_PhotoHandle’ but no such parameter 

誰能告訴我怎樣才能糾正這些錯誤?請幫忙...

回答

1

你在寫Tcl或C嗎?對此的混淆是導致所有這些錯誤的原因。

假設你只是寫的Tcl彈出一個Tk的GUI,做什麼,你做一個與此內容稱爲hello.tcl文件:

package require Tk 
proc hello {} { 
    puts "Hello C++/Tk!" 
} 
button .b -text "Say Hello" -command hello 
pack .b -padx 20 -pady 6 

然後你這樣運行它:

wish hello.tcl 

要在C程序中運行此操作,需要做更多工作。

#include <tcl.h> 
#include <tk.h> 
int main(int argc, char **argv) { 
    Tcl_Interp *interp; 

    Tcl_FindExecutable(argv[0]); 
    interp = Tcl_CreateInterp(); 
    Tcl_Eval(interp, 
     "package require Tk\n" 
     "proc hello {} {\n" 
      "puts \"Hello C++/Tk!\"\n" 
     "}\n" 
     "button .b -text \"Say Hello\" -command hello\n" 
     "pack .b -padx 20 -pady 6\n"); 
    Tk_MainLoop(); 
    Tcl_DeleteInterp(interp); 
    return 0; 
} 

字符串文字,分成幾行,應該從以前相當識別。您可能需要使用Tcl_EvalFile來代替腳本以從另一個文件運行,因爲編寫所有用於引用的反斜槓變得單調乏味。還有Tk_MainLoop的替代方案,所有這些都涉及Tcl_DoOneEvent某處(Tk_MainLoop也是一個封裝),但我不能告訴您迄今爲止最適合您的證據。

編譯上述代碼,按照的順序對libtk和libtcl 進行鏈接。我不記得你是否必須明確地鏈接到X11庫,或者與Tk的鏈接是否足夠。