Functions such as strndup() are included in POSIX-2008.1, but are still marked as GNU extensions in uClibc. The <string.h> header is based on glibc, so I ran a diff between glibc 2.15 and uClibc 0.9.33.2 of that header file; everywhere glibc checks for __USE_XOPEN2K8 and uClibc checks for __USE_GNU I patched uClibc. The resulting patch is attached. I only looked at <string.h>, it is likely other headers might need a similar update, but my immediate problem of strndup() not being declared is solved now.
Created attachment 4790 [details] Patch that changes __USE_GNU to __USE_XOPEN2K8 where appropriate in string.h
XOPEN2K8 updates went in as 0769334e2e1c8848757dcf6ca265b6c1dcf98e5d