I could reproduce with simple code example from swi-prolog Running following on attached example raise the error:
swipl-ld -o test.exe test.c test.pl ./test.exe pi/2 Running the same on an Ubuntu with swi-prolog 7.6.4 works. Le jeu. 20 déc. 2018 à 19:26, olivier sallou <[email protected]> a écrit : > Executing cmd directly seems to work: > > swipl > Welcome to SWI-Prolog (threaded, 64 bits, version 7.7.25) > SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software. > Please run ?- license. for legal details. > > For online help and background, visit http://www.swi-prolog.org > For built-in help, use ?- help(Topic). or ?- apropos(Word). > > ?- use_foreign_library(foreign(process)). > true. > > > Logol program is compiled with swipl-ld , so problem seems to occur with > compiled version only. > Older compilations/tests (with older swipl version?) used to work. > > -- > > gpg key id: 4096R/326D8438 (keyring.debian.org) > > Key fingerprint = 5FB4 6F83 D3B9 5204 6335 D26D 78DC 68DB 326D 8438 > > -- gpg key id: 4096R/326D8438 (keyring.debian.org) Key fingerprint = 5FB4 6F83 D3B9 5204 6335 D26D 78DC 68DB 326D 8438
test.pl
Description: Perl program
#include <stdio.h>
#include <SWI-Prolog.h>
#define MAXLINE 1024
int
main(int argc, char **argv)
{ char expression[MAXLINE];
char *e = expression;
char *program = argv[0];
char *plav[2];
int n;
/* combine all the arguments in a single string */
for(n=1; n<argc; n++)
{ if ( n != 1 )
*e++ = ' ';
strcpy(e, argv[n]);
e += strlen(e);
}
/* make the argument vector for Prolog */
plav[0] = program;
plav[1] = NULL;
/* initialise Prolog */
if ( !PL_initialise(1, plav) )
PL_halt(1);
/* Lookup calc/1 and make the arguments and call */
{ predicate_t pred = PL_predicate("calc", 1, "user");
term_t h0 = PL_new_term_refs(1);
int rval;
PL_put_atom_chars(h0, expression);
rval = PL_call_predicate(NULL, PL_Q_NORMAL, pred, h0);
PL_halt(rval ? 0 : 1);
}
return 0;
}

