指向特定安装的perl tcl Tclkit链接

指向特定安装的perl tcl Tclkit链接,perl,tkinter,tcl,tk,Perl,Tkinter,Tcl,Tk,如何将tcl.pm模块链接到macOS上可用的Tclkit 作为替代方案,我也很乐意将Tcl.pm链接到正常的Tcl/Tk安装。如Tcl.pod中所述,这应该在编译模块时完成。他们写道: perl Makefile.PL --library=-l/path/to/tcl(stub).a \ --include=-I/path/to/tcl/include \ --define="-DLIB_RUNTIME_DIR=... -

如何将tcl.pm模块链接到macOS上可用的Tclkit

作为替代方案,我也很乐意将Tcl.pm链接到正常的Tcl/Tk安装。如Tcl.pod中所述,这应该在编译模块时完成。他们写道:

perl Makefile.PL --library=-l/path/to/tcl(stub).a         \
   --include=-I/path/to/tcl/include                       \
   --define="-DLIB_RUNTIME_DIR=... -DTCL_LIB_FILE=..."
因此,为了尝试一下,我采用了macOS上预装的Tcl/Tk框架,将其移动到另一个目录,然后尝试使用以下参数生成file.pl:

perl Makefile.PL \
   --library="-L/xxx/Tcl.framework/Versions/8.5 -ltclstub8.5" \
   --include=-I/xxx/Tcl.framework/Versions/8.5/Headers        \
   --define="-DUSE_TCL_STUBS -DTCLSH_PATH=\\\"/usr/bin\\\" -DLIB_RUNTIME_DIR=\\\"/xxx/Tcl.framework\\\" -DTCL_LIB_FILE=\\\"Tcl\\\""
然后我继续进行正常的制作、测试和安装。我没有得到任何可以指向解决方案的错误。我比较了Makefile.pl创建的make文件(不带参数)和我的文件,发现除了路径(显然)之外没有任何区别,而且我的Makefile漏掉了一行:

#     dynamic_lib => { OTHERLDFLAGS=>q[-framework Carbon] }

无论我尝试什么,我的脚本都会使用标准的Tcl/Tk启动。。。我不知道下一步可以尝试什么

Tcl模块不需要您自己设置不同的详细信息(
--library
--include
--define
),但您可以参考已安装的
tclsh
tclclconfig.sh
自动加载它们

运行时请参见
--tclconfig
--tclsh

% perl Makefile.PL --help
这对我来说很有效,既使用了通过MacPorts获得的Tcl安装(
sudo port install Tcl
;8.6.8),也使用了从Tcl化石签出开始的安装(
core-8-6-branch

这给了我:

$ make test
"/opt/local/bin/perl5.26" -MExtUtils::Command::MM -e 'cp_nonempty' -- Tcl.bs blib/arch/auto/Tcl/Tcl.bs 644
PERL_DL_NONLAZY=1 "/opt/local/bin/perl5.26" "-MExtUtils::Command::MM" "-MTest::Harness" "-e" "undef *Test::Harness::Switches; test_harness(0, 'blib/lib', 'blib/arch')" t/*.t
t/call.t ............. ok     
t/constants.t ........ ok   
t/createcmd.t ........ ok   
t/disposal-subs-a.t .. skipped: because: not installed use Devel::Refcount qw( refcount )
t/disposal-subs-b.t .. ok   
t/disposal-subs-c.t .. ok   
t/disposal-subs-d.t .. ok   
t/disposal-subs-e.t .. ok   
t/disposal-subs-f.t .. ok   
t/disposal-subs.t .... 1/2 [[::perl::CODE(0x7fe3e3802a68) ::perl::Eval; ]]
t/disposal-subs.t .... ok   
t/eval.t ............. ok   
t/export_to_tcl.t .... ok   
t/info.t ............. ok   
t/memleak-a.t ........ skipped: because: not installed use Devel::Refcount qw( refcount )
t/result.t ........... ok   
t/set-callback.t ..... ok   
t/subclass.t ......... ok   
t/trace.t ............ ok   
t/unicode.t .......... ok   
t/var.t .............. ok   
All tests successful.

Test Summary Report
-------------------
t/info.t           (Wstat: 0 Tests: 6 Failed: 0)
  TODO passed:   2
Files=20, Tests=101, 15 wallclock secs ( 0.08 usr  0.03 sys +  0.99 cusr  0.32 csys =  1.42 CPU)
Result: PASS

我已经重新格式化了您的代码片段,使其在疯狂的位置不会出现换行。解决方案是什么?错误是什么?症状是什么?我可能错了,从未尝试过,但我不希望tclkit能起到作用。这是因为tclkit不会将依赖项公开给Tcl.pm(它们存储在独立可执行文件中的虚拟文件系统中)。你最好用一个,谢谢。通过这种方式,我可以在本地安装Tcl的情况下运行Makefile.PL而不会出错。但是,由于Makefile抱怨tclConfig.sh,我无法使用KitDLL。我开始认为,我有很多关于Tcl/Tk的知识需要学习,因为它似乎比最初想象的更复杂。我不会为此责备Tcl/Tk:)确实有不同的部署和安装方法,但这并不会使它比类似的环境更复杂。至于KitDLL:您必须使用KitDLL附带的,其中包含tclConfig.sh。
$ make test
"/opt/local/bin/perl5.26" -MExtUtils::Command::MM -e 'cp_nonempty' -- Tcl.bs blib/arch/auto/Tcl/Tcl.bs 644
PERL_DL_NONLAZY=1 "/opt/local/bin/perl5.26" "-MExtUtils::Command::MM" "-MTest::Harness" "-e" "undef *Test::Harness::Switches; test_harness(0, 'blib/lib', 'blib/arch')" t/*.t
t/call.t ............. ok     
t/constants.t ........ ok   
t/createcmd.t ........ ok   
t/disposal-subs-a.t .. skipped: because: not installed use Devel::Refcount qw( refcount )
t/disposal-subs-b.t .. ok   
t/disposal-subs-c.t .. ok   
t/disposal-subs-d.t .. ok   
t/disposal-subs-e.t .. ok   
t/disposal-subs-f.t .. ok   
t/disposal-subs.t .... 1/2 [[::perl::CODE(0x7fe3e3802a68) ::perl::Eval; ]]
t/disposal-subs.t .... ok   
t/eval.t ............. ok   
t/export_to_tcl.t .... ok   
t/info.t ............. ok   
t/memleak-a.t ........ skipped: because: not installed use Devel::Refcount qw( refcount )
t/result.t ........... ok   
t/set-callback.t ..... ok   
t/subclass.t ......... ok   
t/trace.t ............ ok   
t/unicode.t .......... ok   
t/var.t .............. ok   
All tests successful.

Test Summary Report
-------------------
t/info.t           (Wstat: 0 Tests: 6 Failed: 0)
  TODO passed:   2
Files=20, Tests=101, 15 wallclock secs ( 0.08 usr  0.03 sys +  0.99 cusr  0.32 csys =  1.42 CPU)
Result: PASS