
I am having a problem with `plld' on one machine. The problem is there I get undefined references to symbols of the readline library, which is installed in the system:
$ plld -cc gcc -c++ g++ -ld g++ -o ppl_pl ppl_swiprolog.o ppl_pl.o \ -L../../../src/.libs -lppl \ -L../../../Watchdog/src/.libs -lpwl \ -lm -lgmpxx -lgmp /usr/lib/pl-5.4.7/lib/i686-linux/libpl.a(pl-rl.o)(.text+0x33): In function `PL_install_readline': pl-rl.c: undefined reference to `rl_readline_name' /usr/lib/pl-5.4.7/lib/i686-linux/libpl.a(pl-rl.o)(.text+0x3d):pl-rl.c: undefined reference to `rl_attempted_completion_function' /usr/lib/pl-5.4.7/lib/i686-linux/libpl.a(pl-rl.o)(.text+0x47):pl-rl.c: undefined reference to `rl_basic_word_break_characters' ...
If I add an explicit "-lreadline", then linking succeeds:
$ plld -cc gcc -c++ g++ -ld g++ -o ppl_pl ppl_swiprolog.o ppl_pl.o \ -L../../../src/.libs -lppl \ -L../../../Watchdog/src/.libs -lpwl \ -lm -lgmpxx -lgmp -lreadline % halt
The problem seems to be here:
$ pl -dump-runtime-variables CC="gcc"; PLBASE="/usr/lib/pl-5.4.7"; PLARCH="i686-linux"; PLLIBS="-ldl /usr/lib/libreadline.a -lncurses -lncurses -lm -lrt "; PLLIB="-lpl"; PLLDFLAGS="-export-dynamic -O3 -pthread"; PLSOEXT="so"; PLVERSION="50407"; PLSHARED="yes"; PLTHREADS="yes";
I have no idea why we have "/usr/lib/libreadline.a" instead of "-lreadline" in `PLLIBS'. In fact we get:
$ plld -v -cc gcc -c++ g++ -ld g++ -o ppl_pl ppl_swiprolog.o ppl_pl.o -L../../../src/.libs -lppl -L../../../Watchdog/src/.libs -lpwl -lm -lgmpxx -lgmp eval `pl -dump-runtime-variables` CC="gcc" PLBASE="/usr/lib/pl-5.4.7" PLARCH="i686-linux" PLLIBS="-ldl /usr/lib/libreadline.a -lncurses -lncurses -lm -lrt" PLLIB="-lpl" PLLDFLAGS="-export-dynamic -O3 -pthread" PLSOEXT="so" PLTHREADS="yes" g++ -o ppl_pl -export-dynamic -O3 -pthread ppl_swiprolog.o ppl_pl.o /usr/lib/libreadline.a -L/usr/lib/pl-5.4.7/lib/i686-linux -L../../../src/.libs -L../../../Watchdog/src/.libs -lpl -lppl -lpwl -lm -lgmpxx -lgmp -ldl -lncurses -lncurses -lm -lrt /usr/lib/pl-5.4.7/lib/i686-linux/libpl.a(pl-rl.o)(.text+0x33): In function `PL_install_readline': pl-rl.c: undefined reference to `rl_readline_name' /usr/lib/pl-5.4.7/lib/i686-linux/libpl.a(pl-rl.o)(.text+0x3d):pl-rl.c: undefined reference to `rl_attempted_completion_function' /usr/lib/pl-5.4.7/lib/i686-linux/libpl.a(pl-rl.o)(.text+0x47):pl-rl.c: undefined reference to `rl_basic_word_break_characters' ...
So, either "-lreadline" should be used instead of "/usr/lib/libreadline.a", or "/usr/lib/libreadline.a" should be put after "-lpl" in the link command. In both cases, this would seem to be a bug in SWI-Prolog 5.4.7. All the best,
Roberto