Following a suggestion off list I am trying a different toolchain - VC9,
which is a free download from Microsoft. As per the instructions for msvc
in the WINDOWS file I have also installed the platform SDK. That and mingw
are my only options for Qt on Windows so I hope it works. :-)
Switching toolchains was not trivial. Much downloading and configuring and
a few minor glitches later I finally have a debug build of gprolog built
with Visual Studio C++ 2008.
I had to comment out the line:
#define fgetc getc
in arch_dep.h to get around an error:
c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(272) : error
C3163: 'getc': attributes inconsistent with previous declaration
c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(214)
: see declaration of 'getc'
(( I guess the autoconf test was failing to set HAVE_FGETC ))
Now I have to persuade Qt to use the VS tool chain... will report back.
On Sat, Mar 20, 2010 at 10:11 PM, Sarah Smith <[email protected]> wrote:
> Hi,
>
> First off would like to say thanks to the authors of gprolog for a great
> prolog implementation and an nice cross-platform distribution.
>
> I'm working on a text adventure game as a personal project, using prolog
> for the game logic, and C++/Qt for the UI.
>
> The plan is to release it on Mac (my main development platforrm), Windows
> (I run XP in a VM just for this purpose) and Linux. My day job is writing
> C++ code, and I know my way around compilers.
>
> As soon as I got past first base, with some game logic and a UI working, I
> wanted to build a release on all platforms to make sure things are all
> working.
>
> But while things work well on Mac - after a couple of teething problems -
> I'm stuck with a crash bug on Windows.
>
> The problem is occurring in my "do_command" function when I call
> Pl_Query_Call:
>
> extern "C" void do_command(const char *command)
> {
> int func;
> int res;
> PlTerm arg[512];
> char cmd[512];
> PlTerm list;
>
> func = Find_Atom("do_command");
>
> if (func)
> {
> Pl_Query_Begin(PL_TRUE);
> i = 0;
> k = 0;
> list[0] = NULL;
> while (command[i])
> {
> /* parse each token out into cmd */
> arg[k++] = Mk_String(cmd);
> }
> if (k)
> list = Mk_Proper_List(k, arg);
> res = Pl_Query_Call(func, 1, list);
> while (res)
> res = Pl_Query_Next_Solution();
> Pl_Query_End(PL_RECOVER);
> }
> }
>
> I've cut out some detail but the full source code is here:
> http://gitorious.org/ethex2040/ethex2040/blobs/master/prolog.cpp#line43
>
> I compiled gprolog from source so I could use it in debug mode, but the
> stack trace is not helpful. At least it shows the site of the crash.
>
> When the above function processes a command, I get a SIGSEGV crash on line
> 69 of file unify.c in the function Pl_Unify:
>
> Bind_UV(u_adr, v_word)
>
> I presume there's something wrong with the u_adr pointer. But the other
> frames in the stack are assembler and so far I'm mystified as to how to
> trace what is going wrong.
>
> Any ideas?
>
> Regards,
>
> Sarah Smith
>
_______________________________________________
Users-prolog mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/users-prolog