This question seems to come up constantly. A compile time check for NPTL probably isn't what you want, since you can easily turn NPTL on or off on a program with something like LD_ASSUME_KERNEL. The following snippet is, AFAIK, the best way to check for NPTL support.
#include <stdio.h> #include <unistd.h> #include <alloca.h> #include <string.h> int isnptl (void) { size_t n = confstr (_CS_GNU_LIBPTHREAD_VERSION, NULL, 0); if (n > 0) { char *buf = alloca (n); confstr (_CS_GNU_LIBPTHREAD_VERSION, buf, n); if (strstr (buf, "NPTL")) return 1; } return 0; } int main(void) { printf("NPTL: %s\n", isnptl() ? "yes" : "no"); return 0; }
But more important is why are you checking?.