[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Why failed in process of Prolog call C call Prolog?

From: Shuai Wang
Subject: Re: Why failed in process of Prolog call C call Prolog?
Date: Thu, 24 Jul 2014 09:37:30 -0400

Hello Sean,

I attached all the source code and Makefile here.

The Prolog function foo is called by ssa_c.c function, (babel_foo_wrapper)

Then at line 57 of, it calls function foo3 through c wrapper.
The program can never reach line 58 of, even though I am sure 
it successfully return from foo3, as well as babel_c_0 (which is line 63 of test_c.c)

Yes, I myself also write several Prolog call C, C call prolog code before, and it could work..
That's why I feel so weird this time..

Thank you!


On Thu, Jul 24, 2014 at 2:13 AM, Sean Charles <address@hidden> wrote:

It would greatly help if you could attach *ALL* source code and the commands you are using to compile and link.

I have written C extensions that are called from Prolog and they work just fine so there must be something in your code that’s not right yet!

Show us your code and we will try to help!


On 24 Jul 2014, at 03:26, Shuai Wang <address@hidden> wrote:

Hello gnu-prolog users,

On my 64bit x86 Linux,  I am trying to implement this process.
I have two source code, written in C and Prolog. 
In the Prolog code, I have two functions foo and foo1.

So basically inside Prolog function foo, it calls function foo1 through a C wrapper, then after function foo1 finished, it will return through wrapper back to foo

it is something like :

           Prolog                |         C 
         foo      ----- call ---- >  foo1_wrapper       normal             
         foo1    <-----call -----   foo1_wrapper       normal
         foo1   -------return---> foo1_wrapper       normal
         foo     <-----return----   foo1_wrapper       fail!

The problem is that, it can never return back to function foo after foo1_wrapper returns..

I have done several test(printf, write, valgrind and others...), and I am pretty sure that foo1 returns right value, and foo1_wrapper returns foo1's return value as well.

I am really confused right now, I should be able to look into the details, however, I just don't know which way to go...

Has anyone have certain problems like this...?

Best Regards,
Users-prolog mailing list

Attachment: test_c.c
Description: Text Data

Description: Text Data

Attachment: ssa_c.cil.c
Description: Text Data

Attachment: Makefile.bak
Description: Binary data

reply via email to

[Prev in Thread] Current Thread [Next in Thread]