2

我正在使用与自制 tclsh(Synopsys EDA)接口的商业工具。

在他们的版本中,他们删除了该load命令。因此我不能使用第三方库(在我的例子中是 Graphviz 库)。

我想知道是否有另一种方法可以导入二进制文件(.so文件)

4

1 回答 1

1

标准 Tcl 中唯一引入动态库的命令是load. (好吧,package require也可以,但那是因为它可以load在内部调用。)如果没有该命令,您只有静态链接自己的代码和在Tcl_AppInit函数中创建命令等选项,但如果您已经这样做了,那真的不太可能奏效使用其他人的代码已经完成了这类事情。

最简单的方法可能是通过(运行并等待终止)或(打开管道)将正常tclsh作为子进程运行。如果他们也没有关闭这些功能;你可能在一个安全的解释器中运行,所有这些东西都被系统地禁用了。我不知道有什么方法可以打破标准的安全解释器(为了谨慎起见,将它们锁定错误的机制)所以如果是这种情况,你只需要将你想要的数据保存到文件中某处(通过任何有效的机制;默认情况下,安全解释器也根本无法触及文件系统,尽管通常以受保护的方式对其进行分析)并使用完全独立的程序来处理它。exec tclsh script.tclopen |tclsh r+

于 2018-04-08T07:38:09.433 回答