Index: /trunk/src/kmk/kmkbuiltin/mscfakes.c
===================================================================
--- /trunk/src/kmk/kmkbuiltin/mscfakes.c	(revision 2483)
+++ /trunk/src/kmk/kmkbuiltin/mscfakes.c	(revision 2484)
@@ -216,5 +216,4 @@
 {
     int rc = 0;
-    int saved_errno;
     int fMustBeDir;
     char *pszPathFree = msc_fix_path(&pszPath, &fMustBeDir);
@@ -259,7 +258,28 @@
 
 
+typedef BOOL (WINAPI *PFNCREATEHARDLINKA)(LPCSTR, LPCSTR, LPSECURITY_ATTRIBUTES);
 int link(const char *pszDst, const char *pszLink)
 {
-    if (CreateHardLink(pszDst, pszLink, NULL))
+    static PFNCREATEHARDLINKA   s_pfnCreateHardLinkA = NULL;
+    static int                  s_fTried = FALSE;
+
+    /* The API was introduced in Windows 2000, so resolve it dynamically. */
+    if (!s_pfnCreateHardLinkA)
+    {
+        if (!s_fTried)
+        {
+            HMODULE hmod = LoadLibrary("KERNEL32.DLL");
+            if (hmod)
+                *(FARPROC *)&s_pfnCreateHardLinkA = GetProcAddress(hmod, "CreateHardLinkA");
+            s_fTried = TRUE;
+        }
+        if (!s_pfnCreateHardLinkA)
+        {
+            errno = ENOSYS;
+            return -1;
+        }
+    }
+
+    if (s_pfnCreateHardLinkA(pszLink, pszDst, NULL))
         return 0;
     return msc_set_errno(GetLastError());
