如何构建自定义 TclDevKit 前缀文件?
我想使用自定义的TCL解释器作为TclDevKit的tclapp
的前缀文件。
我有一个从以下文件构建的 TCL 解释器:
// file main.cpp
#include <tcl.h>
int
Tcl_AppInit( Tcl_Interp* interp )
{
if ( Tcl_Init( interp ) == TCL_ERROR ) {
return TCL_ERROR;
}
if ( Tcl_Eval( interp, "puts \"this is my interpreter\"" ) == TCL_ERROR ) {
return TCL_ERROR;
}
return TCL_OK;
}
int
main( int argc, char** argv )
{
Tcl_Main( argc, argv, &Tcl_AppInit );
return 0;
}
我使用以下命令构建 main.cpp
:
g++ -Wl,-R/usr/local/lib -L/usr/local/lib -ltcl main.cpp -o myinterp
并获得一个解释器 myinterp
。
我应该如何修改 main.cpp
和上面的 g++
命令才能将 myinterp
作为 -prefix
选项传递TclDevKit 的 tclapp 的?
I want to use a custom TCL interpreter as the prefix file of TclDevKit's tclapp
.
I have a TCL interpreter built from the following file:
// file main.cpp
#include <tcl.h>
int
Tcl_AppInit( Tcl_Interp* interp )
{
if ( Tcl_Init( interp ) == TCL_ERROR ) {
return TCL_ERROR;
}
if ( Tcl_Eval( interp, "puts \"this is my interpreter\"" ) == TCL_ERROR ) {
return TCL_ERROR;
}
return TCL_OK;
}
int
main( int argc, char** argv )
{
Tcl_Main( argc, argv, &Tcl_AppInit );
return 0;
}
I build main.cpp
with the following command:
g++ -Wl,-R/usr/local/lib -L/usr/local/lib -ltcl main.cpp -o myinterp
and get an interpreter myinterp
.
How should I modify main.cpp
and the g++
command above to be able to pass myinterp
as -prefix
option of TclDevKit's tclapp
?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这并不容易。前缀文件不是传统的可执行文件,而是完整打包的 Tcl 解释器包括一个虚拟文件系统,其中包含通常在外部文件中的所有额外位和片段(例如,某些机器上的编码、脚本、时区信息) ,其他资源(文本和二进制)。这一切都使用 sdx 工具打包为一个名为“tclkit”的实体,并且它还需要包含一堆自定义内容(例如保存的字节码文件加载程序包)。简而言之,这是一个相当复杂的构建。
为什么需要这个?你真的需要 C++ 吗?您能否重写您的代码,使其位于 Tcl 的
load
命令可以使用的共享库中?This is not easy. The prefix files are not conventional executables, but rather full packaged Tcl interpreters including a virtual filesystem containing all the extra bits and pieces that are normally in external files (e.g., encodings, scripts, timezone info on some machines, other resources both textual and binary). This is all packaged up as an entity called a “tclkit” using the sdx tool, and it needs to include a bunch of custom things too (such as the saved-bytecode-file loader package). In short, it's quite a complex build.
Why do you need this? Do you really need C++? Can you rewrite your code so it is in a shared library that Tcl's
load
command can make available?