Problem with GC - linking C++ & D (with gdc)

Claude claudemr at live.fr
Tue Apr 26 10:23:15 UTC 2022


Hello,

I'm working on a C++ project requiring an XML parser. I decided 
to make it in D so I could easily parse at run-time or 
compile-time as I wish.

As our project uses a gcc tool-chain, I naturally use GDC (GCC 
9.4.0).

But I have a few problems with D, linking with it, trying to use 
better-C and CTFE, etc.

Here's a reduced sample of one of my problems:

parser.d
```
extern(C) int* ct_parse()
{
     int* a = new int(42);
     return a;
}
```

main.cpp
```
extern "C" const int* ct_parse();

int main(int argc, char ** argv)
{
     return *ct_parse();
}
```

Compiling/linking using the following command-lines:
```
gcc -c parser.d -o parser.o
gcc -std=c++17 -c main.cpp -o main.o
gcc main.o parser.o -lstdc++ -lgphobos -lgdruntime -o test
```

It seg-faults...

Here's the output of gdb:
```
Program received signal SIGSEGV, Segmentation fault.
0x00007ffff777858a in gc_qalloc () from 
/usr/lib/x86_64-linux-gnu/libgdruntime.so.76
```

Does anyone have any idea what's going on?

(if I just compile a single D file with "int main() { int* a = 
new int(42); return *a; }", it works as intended.)


More information about the Digitalmars-d-learn mailing list