我有一個託管tcl解釋器的可執行文件和一個託管擴展的庫。 我希望能夠動態地構建庫(加載Tcl的load
) 或靜態(單個可執行文件,或隱式加載)。建議在tcl中靜態或動態加載.so軟件包
所述可執行代碼:
#ifdef GO_STATIC
extern int My_ext_Init(Tcl_Interp* interp);
Tcl_StaticPackage(interp, "my_ext", My_ext_Init, My_ext_Init);
My_ext_Init(interp); // THIS SHOULD NOT BE NEEDED !!
Tcl_SetVariable(interp, "is_statically_linked", "1", TCL_GLOBAL_ONLY);
#else
Tcl_SetVariable(interp, "is_statically_linked", "0", TCL_GLOBAL_ONLY);
#endif
庫代碼..可以是靜態或動態庫(.A或.so /的.lib或.dll):
int My_ext_Init(Tcl_Interp *interp)
{
if (Tcl_PkgProvide(interp, "My_ext", "1.0") == TCL_ERROR) {
return TCL_ERROR;
}
Tcl_CreateObjCommand(interp, /*...etc...*/);
}
啓動TCL代碼:
global is_statically_linked
if {$is_statically_linked} {
load {} my_ext
} else {
load my_ext my_ext
}
問題是..我真的不應該叫My_ext_Init(interp);
因爲它 當我評估時應由Tcl調用load {} my_ext
製作社區wiki,以便推薦的方式可以放在此處。
您不會說可執行文件中的第一個代碼段放在哪裏。這很重要... – 2010-09-17 08:19:16