我正在尝试使用以下命令构建包含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上构建另一个可执行文件?
答案 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]
应该按预期工作。