Создание сохраненного состояния в SWI-Prolog

Я пытаюсь создать сохраненное состояние из верхнего уровня в Windows, но продолжаю получать эту ошибку:

1 ?- qsave_program('U:/boo64.prc').
%   library(broadcast) compiled into broadcast 0.00 sec, 7,504 bytes
%   library(debug) compiled into prolog_debug 0.00 sec, 21,544 bytes
%   library(option) compiled into swi_option 0.00 sec, 14,416 bytes
%   library(arithmetic) compiled into arithmetic 0.00 sec, 33,872 bytes
%  library(settings) compiled into settings 0.00 sec, 120,152 bytes
% c:/program files/swi-prolog/library/listing compiled into prolog_listing 0.00 sec, 180,936 bytes
%   library(occurs) compiled into occurs 0.00 sec, 5,144 bytes
%  library(prolog_clause) compiled into prolog_clause 0.00 sec, 61,544 bytes
% c:/program files/swi-prolog/library/prolog_stack compiled into prolog_stack 0.00 sec, 77,320 bytes
ERROR: '$mark_executable'/1: file `U:/boo64.prc' does not exist (No such file or directory)
2 ?- 

Я думал, что это должно сделать это. Почему он даже пытается вызвать «mark_executable»? Все, что мне нужно, это файл ресурсов, который я могу загрузить из своего встроенного приложения C/C++.

Кто-нибудь может помочь?


person aLu    schedule 12.04.2012    source источник
comment
Вы уверены, что у вас есть доступ к диску U?   -  person gusbro    schedule 12.04.2012
comment
Неважно, какой диск/имя файла/расширение я использую, я всегда получаю это..   -  person aLu    schedule 12.04.2012
comment
Хорошо, это странно. Я пробовал здесь с моим SWI 5.10.4 (Windows), и он отлично работает. Мне удалось получить ошибку только в том случае, если я использую недопустимое имя файла.   -  person gusbro    schedule 12.04.2012
comment
Это становится еще более странным. Если этот файл существует заранее, он удаляется. Вывод пролога остается прежним. У меня v5.10.5 (виндовс)   -  person aLu    schedule 13.04.2012


Ответы (1)


Документация SWI-Prolog для qsave_program кратка и трудна для понимания, но начните здесь. Последние два раздела, Создание сохраненного состояния и Компиляция с использованием параметра командной строки -c, по крайней мере дадут вам пример, который стоит попробовать.

Я думаю, что проблема здесь в том, что использование версии qsave_program с 1 аргументом вынуждает сохранять состояние программы не только как ресурс, но и как ресурс, добавленный в конец машинно-зависимого исполняемого файла, эмулятора Пролога. Такой файл в Windows нуждается в расширении .exe, но вы пытаетесь установить расширение .prc.

Из примера я бы попробовал использовать атом boo64 в качестве аргумента File. Если вы хотите удалить эмулятор из состояния сохранения программы или изучить этот ресурс, ознакомьтесь с разделами, на которые есть ссылки в нижней части этой страницы.

person hardmath    schedule 13.04.2012
comment
Спасибо, это действительно помогло: swipl --stand_alone=false -o boot64.prc -c test.pl Мне просто интересно, почему результирующий файл имеет размер 269 КБ, тогда как исходный файл составляет 113 КБ (только 2 коротких тестовых факта в моем тесте. пл) - person aLu; 13.04.2012
comment
Один из аргументов Options (из qsave_program) обещает предоставить удобочитаемый след того, что происходит в сохраненной программе. Я думаю, что это map(+File), где File — это имя файла, в который нужно поместить трассировку. Скорее всего, есть какой-то библиотечный код или другая информация о состоянии, о которой вы не думаете, когда сосредотачиваетесь только на своем файле test.pl. - person hardmath; 13.04.2012