[Glass] GemBuilder for C compilation on 3.6.1

Norm Green norm.green at gemtalksystems.com
Sun Jun 20 16:06:58 PDT 2021


  Iwan,

I was able to get it work with the following changes based on your code:



// test.c

#include <stdio.h>
#include <gcits.hf>

int main() {
// load the GciTS library first
   char msg[256];
   const char* path = NULL;
   if (! GciTsLoad(path, msg, sizeof(msg))) {
     printf("ERROR: GciTsLoad failed %s\n", msg);
     exit(1);
   }

const char *unencrypted_password = "abcde";
char *out_buff;
char *encrypted_password;
int encrypted_char;
unsigned int out_buff_size = 1000;
out_buff = (char *)malloc(out_buff_size * sizeof(char));
GciTsEncrypt(unencrypted_password, out_buff, out_buff_size);
free(out_buff);
return 0;
}

-------------------------------------------
# test.mak - link with gcirtlobj.o instead of libgcits. GciTsLoad() will 
load the shared lib.


COMPILE_FLAGS=-fmessage-length=0 -fcheck-new -O3 -ggdb -m64 -pipe \
-D_REENTRANT -D_GNU_SOURCE -pthread -fPIC \
-fno-strict-aliasing -fno-exceptions -x c++

LINK_FLAGS=-m64 -Wl,-Bdynamic,--no-as-needed -lpthread -Wl,--as-needed \
-lcrypt -ldl -lc -lm -lrt -Wl,-traditional -Wl,-z,lazy

all:
     g++ -I${GEMSTONE}/include ${COMPILE_FLAGS} -c test.c -o test.o
     g++ ${GEMSTONE}/lib/gcirtlobj.o ${LINK_FLAGS} test.o -o test






On 6/20/2021 1:39 AM, Iwan Vosloo via Glass wrote:
> Hi all,
>
> I am trying to compile C code that calls GemBuilder for C functions.
> I take inspiration from 
> https://downloads.gemtalksystems.com/docs/GemStone64/3.6.x/GS64-GemBuilderforC-3.6.pdf 
> sections 5.2 and 5.3.
>
> I am doing this on Ubuntu 20.04, using g++ 9.3.0 all of which are 
> supported according to the above doc.
>
> I also have installed GemStone64Bit3.6.1-x86_64.Linux
>
> I have a simplified test program that just calls a simple function 
> from libgcits. I can compile and link, but when I run the resultant 
> program it segfaults when I callthe Gci function. I have to confess 
> that I haven't touched C in 20 years, so I am probably doing stupid 
> things. (I had this working with GemStone 3.4.1)
>
> Here is my program (test.c):
>
> #include <stdio.h>
> #include <gcits.hf>
>
> int main() {
>   const char *unencrypted_password = "abcde";
>   char *out_buff;
>   char *encrypted_password;
>   int encrypted_char;
>   unsigned int out_buff_size = 1000;
>   out_buff = (char *)malloc(out_buff_size * sizeof(char));
>   GciTsEncrypt(unencrypted_password, out_buff, out_buff_size);
>   free(out_buff);
>   return 0;
> }
>
> I build it using this makefile:
>
> COMPILE_FLAGS=-fmessage-length=0 -fcheck-new -O3 -ggdb -m64 -pipe \
>               -D_REENTRANT -D_GNU_SOURCE -pthread -fPIC \
>               -fno-strict-aliasing -fno-exceptions -x c++
>
> LINK_FLAGS=-m64 -Wl,-Bdynamic,--no-as-needed -lpthread -Wl,--as-needed \
>            -lcrypt -ldl -lc -lm -lrt -Wl,-traditional -Wl,-z,lazy
>
> all:
>     g++ -I${GEMSTONE}/include ${COMPILE_FLAGS} -c test.c -o test.o
>     g++ -L${GEMSTONE}/lib -lgcits-3.6.1-64 ${LINK_FLAGS} test.o -o test
>
>
> The options above are taken from 5.3 of the doc, except that I link 
> gcits-3.6.1-64 library directly instead of using the run time loading 
> as is explained earlier in the doc.
>
> What am I missing here?
>
> Regards
> Iwan
>



More information about the Glass mailing list