diff --git a/include/ac/string.h b/include/ac/string.h
index 00c79d34a11e8c7302b1756d0f42869043737fa7..d383251502b73eb125508919ac4834188b6da658 100644
--- a/include/ac/string.h
+++ b/include/ac/string.h
@@ -94,11 +94,10 @@ int (strncasecmp)();
 #define memcmp lutil_memcmp
 #endif
 
+void *(lutil_memrchr)(const void *b, int c, size_t n);
 /* GNU extension (glibc >= 2.1.91), only declared when defined(_GNU_SOURCE) */
-#ifndef HAVE_MEMRCHR
-#undef memrchr
-#define memrchr lutil_memrchr
-void * memrchr(const void *b, int c, size_t len);
+#if defined(HAVE_MEMRCHR) && defined(_GNU_SOURCE)
+#define lutil_memrchr(b, c, n) memrchr(b, c, n)
 #endif /* ! HAVE_MEMRCHR */
 
 #define STRLENOF(s)	(sizeof(s)-1)
diff --git a/include/lber_pvt.h b/include/lber_pvt.h
index 378f00b6275fbdf0ee01cfe30d53e9ac3af59c9b..365a243bcabbf89868139cae2c01aacfce16fddc 100644
--- a/include/lber_pvt.h
+++ b/include/lber_pvt.h
@@ -173,7 +173,7 @@ ber_bvarray_dup_x LDAP_P(( BerVarray *dst, BerVarray src, void *ctx ));
 	((char *) memchr( (bv)->bv_val, (c), (bv)->bv_len ))
 
 #define ber_bvrchr(bv,c) \
-	((char *) memrchr( (bv)->bv_val, (c), (bv)->bv_len ))
+	((char *) lutil_memrchr( (bv)->bv_val, (c), (bv)->bv_len ))
 
 #define ber_bvchr_post(dst,bv,c) \
 	do { \
@@ -190,13 +190,13 @@ ber_bvarray_dup_x LDAP_P(( BerVarray *dst, BerVarray src, void *ctx ));
 
 #define ber_bvrchr_post(dst,bv,c) \
 	do { \
-		(dst)->bv_val = memrchr( (bv)->bv_val, (c), (bv)->bv_len ); \
+		(dst)->bv_val = lutil_memrchr( (bv)->bv_val, (c), (bv)->bv_len ); \
 		(dst)->bv_len = (dst)->bv_val ? (bv)->bv_len - ((dst)->bv_val - (bv)->bv_val) : 0; \
 	} while (0)
 
 #define ber_bvrchr_pre(dst,bv,c) \
 	do { \
-		(dst)->bv_val = memrchr( (bv)->bv_val, (c), (bv)->bv_len ); \
+		(dst)->bv_val = lutil_memrchr( (bv)->bv_val, (c), (bv)->bv_len ); \
 		(dst)->bv_len = (dst)->bv_val ? ((dst)->bv_val - (bv)->bv_val) : (bv)->bv_len; \
 		(dst)->bv_val = (bv)->bv_val; \
 	} while (0)
diff --git a/libraries/liblutil/utils.c b/libraries/liblutil/utils.c
index cccb2d1099b39610edeeaac6e1f13fd93e3f0e3a..9fc2c906c2af1ad9979618cbeeab03520976da97 100644
--- a/libraries/liblutil/utils.c
+++ b/libraries/liblutil/utils.c
@@ -567,7 +567,7 @@ int closedir(DIR *dir)
  * Memory Reverse Search
  */
 void *
-lutil_memrchr(const void *b, int c, size_t n)
+(lutil_memrchr)(const void *b, int c, size_t n)
 {
 	if (n != 0) {
 		const unsigned char *s, *bb = b, cc = c;