exern (C) linkage problem
Charles Hixson
charleshixsn at earthlink.net
Sun Jul 18 13:08:57 PDT 2010
I'm trying to link a C routine to a D program, passing string
parameters, but I keep getting segmentation errors.
As you can see, these are simple test routines, so the names don't
reflect current status, but merely where I intend to arrive...but I've
hit severe roadblocks.
(FWIW, I've tried including -fpic in the gcc command, and it didn't
appear to make any difference.)
Makefile:
biblio: biblio.d sqlitebase.o
dmd biblio.d sqlitebase.o -ofbiblio
sqlitebase.o: sqlitebase.c sqlitebase.h
gcc -c sqlitebase.c
biblio.d:
import std.stdio;
//extern (C) void dbdefine (char[] str);
extern (C) void dbdefine (char[] inStr, ref char[255] outStr);
void main()
{ char[255] retVal;
char[] msg = cast(char[])"Hello from C\0";
dbdefine (msg, retVal);
writeln ("Hello, World");
}
sqlitebase.h:
//void dbdefine (char str[]);
void dbdefine (char inStr[], char outStr[255]);
sqlitebase.c:
#include "sqlitebase.h"
//void dbdefine (char str[])
void dbdefine (char inStr[], char outStr[255])
{ //int i = 0;
//while (str[i] != 0) i++;
//printStr (i, str);
//^^--segmentation fault--^^
// printf ("%s/n", str);
//^^--warning: incompatible implicit declaration of built-in
function ‘printf’--^^
//int i = str[0];
//putchar(i);
//^^--segmentation fault--^^
int i = -1;
while (++i < 255)
{ if (inStr[i] == 0) break;
outStr[i] = inStr[i];
}
}
More information about the Digitalmars-d-learn
mailing list