在c程序中包括tk.h和tcl.h
我正在开发 ubuntu 系统。我的目标基本上是使用 TCL/TK 的 GUI 工具用 C 语言制作一个 IDE。我安装了 tcl 8.4、tk8.4、tcl8.4-dev、tk8.4-dev,并且系统中有 tk.h 和 tcl.h 头文件。但是,当我运行一个基本的 hello world 程序时,它显示了很多错误。
#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
有人可以告诉我如何纠正这些错误吗?请帮忙...
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这根本不是一个有效的程序。您尝试做的是将 Tcl 和 Tk 嵌入到您的 C 应用程序中。阅读 Tcl/Tk 书中的相关章节或研究 Tcl Wiki(例如 1)。
要运行 Tcl 或 Tk 命令,您必须正确初始化
Tcl_Interp
。因此至少您必须初始化 Tcl 库并创建一个解释器。然后对于 Tk,您需要初始化该库并运行事件循环。Tcl_AppInit
的文档对此进行了讨论,Tcl 源代码中的tclAppInit.c
文件(或 Tk 中的tkAppInit.c
)向您展示了如何设置你的应用程序。通常,您可以使用提供的 tkAppInit 文件作为“main”,并将自定义应用程序初始化放入从 Tcl 或 Tk 主函数调用的 Tcl_AppInit 函数中。从 C 调用 Tk 函数是不明智的。定义脚本并在 Tcl 中写入 Tk 位。甚至 Tk 本身也使用 Tcl 脚本(来自
library/*.tcl
)创建标准对话框等。This is not a valid program at all. What you are attempting to do is embed Tcl and Tk into your C application. Read the relevant sections in a Tcl/Tk book or research the Tcl Wiki (for instance 1).
To run Tcl or Tk commands you must have a
Tcl_Interp
properly initialized. So at minimum you must initialize the Tcl library and create an interpreter. Then for Tk you will need to initialize that library and run an event loop. The documentation forTcl_AppInit
discusses this and thetclAppInit.c
file in the Tcl source (ortkAppInit.c
in Tk) show you how to setup your app. Typically you would use the providedtkAppInit
file as 'main' and put your custom application initialization into aTcl_AppInit
function that is called from the Tcl or Tk main function.Calling Tk functions from C is ill advised. Define scripts and write the Tk bits in Tcl. Even Tk itself creates standard dialogs and such using Tcl scripts (from
library/*.tcl
).但是...您不应该使用
<>
进行系统范围的包含吗?!和button("..") -text("...") ..
不是好的 C 语法,除非 tk.h 提供强大的宏button
和 < code>-text (这是有问题的,即不可能),我怀疑事实并非如此(事实上并非如此)...您可能对 此,以及对 此
but... shouldn't you use
<>
for systemwide include?! andbutton("..") -text("...") ..
isn't good C grammar, unless tk.h gives powerful macrosbutton
and-text
(which is problematic, i.e., not possible), and I suspect it is not so (in fact it is not so)...You could be interested in this, and also a reading to this and digging around is worth; and also (more interesting for you maybe), read e.g. this