On Sun, 18 Apr 2010 19:14:33 +0200, Lars T. Kyllingstad wrote: > Graham Fawcett wrote: >> Hi folks, >> >> I'm having trouble reading an external(C) global value in D2. I think >> I'm using __gshared properly to sidestep the TLS issues, but I'm still >> getting an incorrect result. >> >> Consider the two following programs, one in C, the other D2: >> >> // testc.c >> #include <stdio.h> >> extern char *gdbm_version; // or #include <gdbm.h> >> >> int main() { >> printf("VERSION (C): %s.\n", gdbm_version); >> } >> >> $ gcc -o testc testc.c -lgdbm && ./testc VERSION (C): GDBM version >> 1.8.3. 10/15/2002 (built Nov 5 2008 02:36:47). >> >> // testd.d >> import std.stdio; >> import std.conv; >> >> __gshared extern (C) char *gdbm_version; >> >> void main() { >> string v = to!string(gdbm_version); >> writef("VERSION (D): %s.\n", v); >> } >> >> $ dmd testd.d -L-lgdbm && ./testd >> VERSION (D): . >> >> Am I doing something wrong? >> >> Thanks, >> Graham > > > Try adding a second 'extern': > > extern(C) extern __gshared char* gdbm_version;
That did it! Thank you. I have much to learn. Cheers, Graham > > -Lars