I've seen environments where strdup() was declared in stdlib.h instead of string.h where it was supposed to be.
Alternatively, you could be banging up against Microsoft's stupid attempts to "make C secure," by deprecating basic language functions. Do you happen to be compiling with a MS compiler?
EDIT: Haha, nevermind. I forgot that strdup() isn't standard C, so if your compiler doesn't support it... That's tough. Write it yourself:
Code:char *strdup(const char *str) { int n = strlen(str) + 1; char *dup = malloc(n); if(dup) { strcpy(dup, str); } return dup; }