On 2015-12-11 10:18, Mike McKee wrote:
Well, part of it was that I needed to do -shared on Linux instead of
-dynamiclib. On OSX, I have to use -dynamiclib.

It compiles now on the C code, but when I created a cmain.c to test the
library, it gave me a segmentation fault when trying to run this
compiled program, even though I copied gfunc.o and cfunc.o to /usr/lib
on Linux.

// cmain.c
#include <stdio.h>
extern char * c_dfunc(char *s);

void main() {
         printf("%s\n",c_dfunc("request"));
}

There are several issues:

1. The D function needs to use C compatible types, see my answer to your previous post

2. You need to initialize the D runtime from the C side

3. If you allocate data in D using the GC and pass it to the C side, you need to make sure there's a reference to it on the D side. Otherwise the GC could collect the memory

4. Dynamic libraries are not yet supported on OS X

I recommend asking these question in the learning forum. As a first step you need to learn how to interact between D and C. You can get a lot of answers for that on the learning forum, tutorials, documentation, books and so on.

--
/Jacob Carlborg

Reply via email to