运行SWI-Prolog二进制文件而不在机器上安装swipl

时间:2017-03-08 15:09:13

标签: binaryfiles swi-prolog

我想在没有安装prolog的机器上运行swi-prolog程序(实际上是服务器)。

序言代码swipl_test.pl

 main :- write('Hello, world\n').

在使用4.4.0-64-generic #85~14.04.1-Ubuntu SMP Mon Feb 20 12:10:54 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux生成二进制hello的本地计算机SWI-Prolog version 7.2.3 for amd64上:

swipl  --goal=main --toplevel=halt --stand_alone=true  --foreign=save  -o hello1 -c swipl_test.pl

在远程计算机hello上移动2.6.32-5-amd64 #1 SMP Wed Jun 17 16:09:06 UTC 2015 x86_64 GNU/Linux会出现以下错误:

error while loading shared libraries: libswipl.so.7.2: cannot open shared object file: No such file or directory 

如何从prolog代码中准备一个自包含的二进制文件? 我在远程计算机上没有sudo权限。

2 个答案:

答案 0 :(得分:1)

我有同样的问题,我可以解决它,以寻找执行程序所需的共享库。您可以通过执行ldd命令来找到这些库。拥有它们之后,可以将它们与可执行文件分发到同一目录中,并设置LD_LIBRARY_PATH变量,以便可执行文件可以找到它们。

之所以发生这种情况,是因为,如文档中所阐明的,当使用选项--stand_alone = true时,可执行文件将成为具有已保存状态的swipl副本,并且如果SWI-Prolog是静态链接的(在Linux / 386中默认为)并且状态不使用外部程序包,在其他计算机上运行该程序不会有问题。否则(在我们的情况下)必须使共享库可用,以便可执行文件可以找到它们。在Linux中,可以使用ldd(在您的情况下是库libswipl.so.7.2)找到这些共享库。因此,您应该查找该库(默认情况下在/ usr / lib中)并将其复制到可执行文件的目录中,以随其一起分发。然后,在要运行程序的计算机上,必须设置LD_LIBRARY_PATH变量,以便可执行文件知道在哪里可以找到需要运行的库,即与该目录相同的目录,或使用chrpath(1)更改可执行文件搜索的地址。

答案 1 :(得分:0)

它已成为可能,并且可以按以下方式安装swi prolog:

pkg install swi-prolog

这会解决