
I have something that runs under GNU/Linux and does not run under Cygwin. It all boils down to something very simple. I have two files:
$ cat main.cc #include <SWI-Prolog.h>
int main(int, char** argv) { char* pl_args[2]; pl_args[0] = argv[0]; pl_args[1] = 0; if (!PL_initialise(1, pl_args)) PL_halt(1);
predicate_t pred = PL_predicate("mymain", 0, "user"); term_t h0 = PL_new_term_refs(0); int ret_val = PL_call_predicate(0, PL_Q_NORMAL, pred, h0); PL_halt(ret_val ? 0 : 1); } $ cat mymain.pl mymain :- write('mymain/0 called!'), nl.
I compile them under GNU/Linux:
$ g++ -I/usr/local/lib/pl-5.6.2/include -c main.cc $ plld -v -cc gcc -c++ g++ -ld g++ -o test.exe main.o mymain.pl eval `pl -dump-runtime-variables` CC="gcc" PLBASE="/usr/local/lib/pl-5.6.2" PLARCH="i686-linux" PLLIBS="-lgmp -ldl -lreadline -lncursesw -lm -lrt" PLLIB="-lpl" PLLDFLAGS="-export-dynamic -O3 -pthread" PLSOEXT="so" PLTHREADS="yes" g++ -o test.exe -export-dynamic -O3 -pthread main.o -L/usr/local/lib/pl-5.6.2/lib/i686-linux -lpl -lgmp -ldl -lreadline -lncursesw -lm -lrt pl -f none -F none -g true -t "consult(['mymain.pl']),qsave_program('pltmp-8678',[goal='$welcome',toplevel=prolog,init_file=none])" % mymain.pl compiled 0.00 sec, 2,004 bytes % halt cat pltmp-8678 >> test.exe chmod 775 test.exe rm pltmp-8678
I compile them in exactly the same way under Cygwin (note: same version of SWI-Prolog, configured in the same way and installed in the same place):
$ g++ -I/usr/local/lib/pl-5.6.2/include -c main.cc $ plld -v -cc gcc -c++ g++ -ld g++ -o test.exe main.o mymain.pl eval `pl -dump-runtime-variables` % mymain.pl compiled 0.00 sec, 1,984 bytes % halt CC="gcc" PLBASE="/usr/local/lib/pl-5.6.2" PLARCH="i686-cygwin" PLLIBS="-lgmp -lreadline -lncurses -lm -lpthread" PLLIB="-lpl" PLLDFLAGS="-export-dynamic -O3" PLSOEXT="dll" PLTHREADS="yes" g++ -o test.exe -export-dynamic -O3 main.o -L/usr/local/lib/pl-5.6.2/lib/i686-cygwin -lpl -lgmp -lreadline -lncurses -lm -lpthread pl -f none -F none -g true -t "consult(['mymain.pl']),qsave_program('pltmp-3416.exe',[goal='$welcome',toplevel=prolog,init_file=none])" cat pltmp-3416.exe >> test.exe chmod 755 test.exe rm pltmp-3416.exe
However, when I run the result under GNU/Linux I get:
$ ./test.exe Welcome to SWI-Prolog (Multi-threaded, Version 5.6.2) Copyright (c) 1990-2005 University of Amsterdam. SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions. Please visit http://www.swi-prolog.org for details.
For help, use ?- help(Topic). or ?- apropos(Word).
mymain/0 called! $
When I run under Cygwin I get:
$ ./test.exe Welcome to SWI-Prolog (Multi-threaded, Version 5.6.2) Copyright (c) 1990-2005 University of Amsterdam. SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions. Please visit http://www.swi-prolog.org for details.
For help, use ?- help(Topic). or ?- apropos(Word).
ERROR: Undefined procedure: mymain/0
What am I missing? All the best,
Roberto
participants (1)
-
Roberto Bagnara