diff --git a/Makefile b/Makefile
index 8e237e1fda75871ac7098f194b4f4d4436ed4186..80845d5ab831179e1befcd6599c33dae1f453bf4 100644
--- a/Makefile
+++ b/Makefile
@@ -182,11 +182,6 @@ OTHER_SUBDIR_CFLAGS="-I$(ASTTOPDIR)/include"
 # Create OPTIONS variable, but probably we can assign directly to ASTCFLAGS
 OPTIONS=
 
-ifeq ($(OSARCH),linux-gnu)
-  # flag to tell 'ldconfig' to only process specified directories
-  LDCONFIG_FLAGS=-n
-endif
-
 ifeq ($(findstring -save-temps,$(_ASTCFLAGS) $(ASTCFLAGS)),)
   ifeq ($(findstring -pipe,$(_ASTCFLAGS) $(ASTCFLAGS)),)
     _ASTCFLAGS+=-pipe
@@ -222,8 +217,6 @@ ifeq ($(OSARCH),FreeBSD)
   # -V is understood by BSD Make, not by GNU make.
   BSDVERSION=$(shell make -V OSVERSION -f /usr/share/mk/bsd.port.subdir.mk)
   _ASTCFLAGS+=$(shell if test $(BSDVERSION) -lt 500016 ; then echo "-D_THREAD_SAFE"; fi)
-  # flag to tell 'ldconfig' to only process specified directories
-  LDCONFIG_FLAGS=-m
 endif
 
 ifeq ($(OSARCH),NetBSD)
@@ -642,6 +635,23 @@ oldmodcheck:
 		echo " WARNING WARNING WARNING" ;\
 	fi
 
+ld-cache-update:
+ifneq ($(LDCONFIG),)
+	@if [ $${EUID} -eq 0 ] ; then \
+		$(LDCONFIG) "$(DESTDIR)$(ASTLIBDIR)/" ; \
+	else \
+		echo " WARNING WARNING WARNING" ;\
+		echo "" ;\
+		echo " You cannot rebuild the system linker cache unless you are root. " ;\
+		echo " You MUST do one of the follwing..." ;\
+		echo "  * Re-run 'make install' as root. " ;\
+		echo "  * Run 'ldconfig $(DESTDIR)$(ASTLIBDIR)' as root. " ;\
+		echo "  * Run asterisk with 'LD_LIBRARY_PATH=$(DESTDIR)$(ASTLIBDIR) asterisk' " ;\
+		echo "" ;\
+		echo " WARNING WARNING WARNING" ;\
+	fi
+endif
+
 badshell:
 ifneq ($(filter ~%,$(DESTDIR)),)
 	@echo "Your shell doesn't do ~ expansion when expected (specifically, when doing \"make install DESTDIR=~/path\")."
@@ -680,6 +690,7 @@ install: badshell bininstall datafiles
 	@echo " + doxygen installed on your local system    +"
 	@echo " +-------------------------------------------+"
 	@$(MAKE) -s oldmodcheck
+	@$(MAKE) -s ld-cache-update
 
 isntall: install
 
@@ -912,6 +923,9 @@ ifeq ($(HAVE_DAHDI),1)
 	rm -f $(DESTDIR)$(DAHDI_UDEV_HOOK_DIR)/40-asterisk
 endif
 	$(MAKE) -C sounds uninstall
+ifneq ($(LDCONFIG),)
+	$(LDCONFIG) || :
+endif
 
 uninstall: _uninstall
 	@echo " +--------- Asterisk Uninstall Complete -----+"
@@ -1042,6 +1056,7 @@ check-alembic: makeopts
 .PHONY: ari-stubs
 .PHONY: basic-pbx
 .PHONY: check-alembic
+.PHONY: ld-cache-update
 .PHONY: $(SUBDIRS_INSTALL)
 .PHONY: $(SUBDIRS_DIST_CLEAN)
 .PHONY: $(SUBDIRS_CLEAN)
diff --git a/configure b/configure
index 42a21d7c587a644d6a51b7250e4ccafc868879f0..0c2d84ee1958a6768e462931dda5958dc10d57ac 100755
--- a/configure
+++ b/configure
@@ -4892,6 +4892,28 @@ if test ${prefix} = ${ac_default_prefix} || test ${prefix} = 'NONE'; then
      fi
 fi
 
+#
+# The following code for detecting lib64 was taken from Fedora's
+# /usr/share/config.site with a modification to check that the
+# /usr/lib64 directory actually exists.  This prevents libdir from
+# being set to /usr/lib64 on 64-bit systems that still use /usr/lib.
+#
+if test "$prefix" = /usr ||\
+     { test "$prefix" = NONE && test "$ac_default_prefix" = /usr ; }
+then
+     for i in x86_64 ppc64 s390x aarch64; do
+        if test $host_cpu = $i; then
+           if test "$libdir" = '${exec_prefix}/lib' &&\
+              { test -d "${exec_prefix}/lib64" || test -d "${ac_default_prefix}/lib64" ; } ; then
+              libdir='${exec_prefix}/lib64'
+              { $as_echo "$as_me:${as_lineno-$LINENO}:  Setting libdir=${libdir} " >&5
+$as_echo "$as_me:  Setting libdir=${libdir} " >&6;}
+           fi
+           break
+        fi
+     done
+fi
+
 BUILD_PLATFORM=${build}
 BUILD_CPU=${build_cpu}
 BUILD_VENDOR=${build_vendor}
diff --git a/configure.ac b/configure.ac
index fff8ecf7e6ad9ce79d55108595c3aec891ae760a..beb151a20b86a15c0b415e0fcfd83a5366872790 100644
--- a/configure.ac
+++ b/configure.ac
@@ -135,6 +135,27 @@ if test ${prefix} = ${ac_default_prefix} || test ${prefix} = 'NONE'; then
      fi
 fi
 
+#
+# The following code for detecting lib64 was taken from Fedora's
+# /usr/share/config.site with a modification to check that the
+# /usr/lib64 directory actually exists.  This prevents libdir from
+# being set to /usr/lib64 on 64-bit systems that still use /usr/lib.
+#
+if test "$prefix" = /usr ||\
+     { test "$prefix" = NONE && test "$ac_default_prefix" = /usr ; }
+then
+     for i in x86_64 ppc64 s390x aarch64; do
+        if test $host_cpu = $i; then
+           if test "$libdir" = '${exec_prefix}/lib' &&\
+              { test -d "${exec_prefix}/lib64" || test -d "${ac_default_prefix}/lib64" ; } ; then
+              libdir='${exec_prefix}/lib64'
+              AC_MSG_NOTICE([ Setting libdir=${libdir} ])
+           fi
+           break
+        fi
+     done
+fi
+
 BUILD_PLATFORM=${build}
 BUILD_CPU=${build_cpu}
 BUILD_VENDOR=${build_vendor}
diff --git a/main/Makefile b/main/Makefile
index 4d1b2c41bd27877b2ce8ef0ea3beb29f6890fb50..d3463f7b6a8c574ff9008dcadcf4876ff681c6d2 100644
--- a/main/Makefile
+++ b/main/Makefile
@@ -353,9 +353,6 @@ ifeq ($(findstring darwin,$(OSARCH)),) # not Darwin
 else # Darwin
 	$(INSTALL) -m 755 $(ASTPJ_LIB) "$(DESTDIR)$(ASTLIBDIR)/"
 endif
-endif
-ifneq ($(LDCONFIG),)
-	$(LDCONFIG) $(LDCONFIG_FLAGS) "$(DESTDIR)$(ASTLIBDIR)/"
 endif
 	$(LN) -sf asterisk "$(DESTDIR)$(ASTSBINDIR)/rasterisk"
 
@@ -372,9 +369,6 @@ ifneq ($(ASTPJ_LIB).$(ASTPJ_SO_VERSION),.)
 	rm -f "$(DESTDIR)$(ASTLIBDIR)/$(ASTPJ_LIB).$(ASTPJ_SO_VERSION)" || :
 	rm -f "$(DESTDIR)$(ASTLIBDIR)/$(ASTPJ_LIB)"
 endif
-ifneq ($(LDCONFIG),)
-	$(LDCONFIG) $(LDCONFIG_FLAGS) "$(DESTDIR)$(ASTLIBDIR)/"
-endif
 
 clean::
 	rm -f asterisk libasteriskssl.o