我在Ubuntu 20.04上编译YAP Prolog 6.2.2时遇到问题。像往常一样,在README之后,我浏览到YAP文件夹并给出命令成功的CCD_ 1。接下来,我给出命令make
,但它给了我这个错误:
%
%
% YAP OOOPS: mmap could not map at 0x10000000, got 0xffffffffffffffff.
%
%
Exiting ....
make: *** [Makefile:534: startup.yss] Error 1
我已经安装了README文件中建议的库(gmp和readline(,但我不知道问题出在哪里。这个相同的过程在Ubuntu18.04LTS和Ubuntu119.10上运行得很好。
我今天遇到了同样的问题,决定调试这个问题。我找到了这个问题的原因和一个棘手的解决方案。不幸的是,后来构建失败了,出现了一个我还没有弄清楚的相关问题。
问题是尝试使用/dev/zero
来使用mmap
映射可执行内存。然而,在Ubuntu 20.04中,/dev
安装了noexec
标志。我对代码进行了修补,改为使用匿名内存,但正如我上面所说,它在构建过程中的后期失败了(挂起(。挂起的进程正试图通过mmap
重复分配更多内存,但ENOMEM
失败了。
如果我找到一个合适的解决方案,我会在某个地方上传所有这些问题的补丁,并将其链接到这里。