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

时间:2013-09-16 08:46:26

标签: 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 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 32bit构建kbskit。如果我需要在ubuntu 32/64位上使用可执行文件,我是否需要在ubuntu上构建另一个可执行文件?

1 个答案:

答案 0 :(得分:1)

您正在尝试从当前目录加载文件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]

应该按预期工作。