[gambit-list] Building loadable library
Marc Feeley
feeley at iro.umontreal.ca
Mon May 23 17:48:40 EDT 2011
On 2011-05-14, at 12:28 AM, Kartik Saranathan wrote:
> I found the problem is because the ___EXT macro uses the static
> variable ___local_gstate which is uninitialized in fileio_util.cpp.
> If I don't use the ___EXT macro the make_pair works fine. I'm
> guessing the local state is needed for multithreaded applications or
> maybe multiple versions of a loadable library?
It is more for doing dynamic linking on systems that don't natively support dynamic linking. But it is also useful for multithreading.
>
> I see the gambit scm to c compiler inserted a function to do the
> initialization of ___local_gstate in fileio.c but I haven't added
> anything in fileio_util.cpp to do the same initialization. Am I
> allowed to call functions like ___make_pair from fileio_util.cpp in
> the first place? Should I use embedded C code inside the scm file and
> call __make_pair from there instead?
>
> Thanks
>
> Kartik
Can you try compiling Gambit this way:
./configure CC="gcc -D___CAN_IMPORT_DYNAMICALLY"
and compile your C files with gcc -D___CAN_IMPORT_DYNAMICALLY .
This will activate a definition of ___EXT that does not go through a ___local_gstate variable. Then you can call ___make_pair and friends without errors. Alternatively, don't use ___EXT (it was there to explicitly mark dynamically linked functions so that on platforms with no native dynamic linking the appropriate magic would happen).
Marc
More information about the Gambit-list
mailing list