创建包含多个文件(除了main.tcl)的kbskit

创建包含多个文件(除了main.tcl)的kbskit,tcl,tk,starkit,Tcl,Tk,Starkit,我正在尝试使用以下命令构建一个包含iwidgets和img包的kbskit: ./kbs.tcl -builddir=85 -r -mk-bi -bi="itcl3.4 itk3.4 iwidgets4.0.2 img1.4.1" install kbskit8.5 cp 85/bin/kbsmk8.5-bi kbsmk8.5-bi-run ls sim.vfs main.tcl img1.jpg ./kbsmk8.5-bi sdx.kit wrap sim -runtime kb

我正在尝试使用以下命令构建一个包含iwidgets和img包的kbskit:

./kbs.tcl -builddir=85 -r -mk-bi -bi="itcl3.4 itk3.4 iwidgets4.0.2 img1.4.1" install kbskit8.5 

cp 85/bin/kbsmk8.5-bi kbsmk8.5-bi-run 

ls sim.vfs 
main.tcl img1.jpg 

./kbsmk8.5-bi sdx.kit wrap sim -runtime kbsmk8.5-bi-run 

ls 
kbsmk8.5-bi kbsmk8.5-bi-run sdx.kit sim.vfs sim 

./sim 
couldnt open "img1.jpg": no such file or directory 
    while executing 
"image create photo sim_img -file "img1.jpg"" 
    (file "/home/user1/sim/main.tcl" line 10) 
为什么在这里找不到img1.jpg文件

我试着打开包装以检查文件是否在“sim”可执行文件中,并且它确实存在

cp sim /tmp 
cd /tmp
./tclkit sdx.kit unwrap sim
ls sim.vfs 
boot.tcl main.tcl img1.jpg boot.tcl tclkit.ico lib 
ls sim.vfs/lib/ 
img1.4.1 itk3.4 tcl8 thread2.6.7 vfs1.4.2 
itcl3.4  iwidgets4.0.2  tcl8.5  tk8.5 
1) 有谁能帮助我理解上述行为吗


2) 我正在suse 32位上构建kbskit。如果我需要在ubuntu 32/64位上使用可执行文件,我需要在ubuntu上构建另一个可执行文件吗

您正试图从当前目录加载文件
img1.jpg
,该目录通常是启动脚本/工具包的目录(例如,如果您从
/use/bin/yourkit
启动
/home/user
,当前目录将是
/home/user

解决方案是使用脚本的相对路径:

image create photo sim_img -file [file join [file dirname [info script]] img1.jpg]
这仅在源文件时有效。您可以将
info script
的结果保存在变量中,也可以使用
::starkit::topdir
变量,该变量指向工具包的topdir,因此

image create photo sim_img -file [file join $::starkit::topdir img1.jpg]

应按预期工作。

谢谢Johannes。。完全符合我的目的!!你/其他人也能解释一下我的第二个问题吗。。ie,2)我正在suse 32位上构建kbskit。如果我需要在ubuntu 32/64位上使用可执行文件,我需要在ubuntu上构建另一个可执行文件吗。。同样,对于redhat??你可能应该问另一个问题。或者试试看。有道理:)非常感谢!