diff --git a/src/sbbs3/GNUmakefile b/src/sbbs3/GNUmakefile
index 1f4a7a32bd80ac5445e56b14ca4b1fecb7019119..8c682a859e673a2cd6861d1decff8b7af46d65f0 100644
--- a/src/sbbs3/GNUmakefile
+++ b/src/sbbs3/GNUmakefile
@@ -150,12 +150,16 @@ ifndef NO_LD_RUN_PATH
 endif
 
 CON_LIBS	+= -lsbbs -lftpsrvr -lwebsrvr -lmailsrvr -lservices
-SHLIBOPTS	:=	-shared
 ifeq ($(os),sunos)
  MKSHLIB		:=	/usr/ccs/bin/ld -G
  MKSHPPLIB		:=	/usr/ccs/bin/ld -G
  SHLIBOPTS	:=
 else
+ ifeq ($(os),darwin)
+  SHLIBOPTS	=	-shared -install_name `realpath $(SBBSDIR)`/$@
+ else
+  SHLIBOPTS	:=	-shared
+ endif
  MKSHLIB		:=	$(CC)
  MKSHPPLIB		:=	$(CXX)
 endif
diff --git a/src/sbbs3/gtkmonitor/GNUmakefile b/src/sbbs3/gtkmonitor/GNUmakefile
index ebb4b9da90a15a674200bb4e279e6b1bcb055552..2f6981002a5e202dd810e25bfeea0034afe8499c 100644
--- a/src/sbbs3/gtkmonitor/GNUmakefile
+++ b/src/sbbs3/gtkmonitor/GNUmakefile
@@ -24,19 +24,23 @@ endif
 vpath %.c ..
 
 CFLAGS	+=	$(SBBSDEFS) -I.. -I../../comio $(SMBLIB_CFLAGS) $(HASH_CFLAGS) $(XPDEV-MT_CFLAGS) $(JS_CFLAGS) $(CRYPT_CFLAGS) `pkg-config gtk+-3.0 --cflags`
-# Hopefully, -Wl,-E exports all symbols dynamically everywhere.
-LDFLAGS	+=	-Wl,-E -L../$(LIBODIR) $(SMBLIB_LDFLAGS) $(XPDEV-MT_LDFLAGS) $(MT_LDFLAGS)
+LDFLAGS	+=	-L../$(LIBODIR) $(SMBLIB_LDFLAGS) $(XPDEV-MT_LDFLAGS) $(MT_LDFLAGS)
 EXTRA_LIBS +=	`pkg-config gtk+-3.0 --libs`
 
 # Because pkg-config for libglade uses --rpath, we need to also, LD_RUN_PATH
 # won't work.  :-(
+ifeq ($(os),darwin)
+ RPATH := -rpath
+else
+ RPATH := --rpath
+endif
 ifdef SBBSDIR
- LDFLAGS	+=	-Wl,--rpath -Wl,$(SBBSDIR)/exec
+ LDFLAGS	+=	-Wl,$(RPATH),$(SBBSDIR)/exec
 endif
 PARENT_DIR = $(shell dirname `pwd`)
-LDFLAGS	+=	-Wl,--rpath -Wl,$(PARENT_DIR)/$(LIBODIR)
+LDFLAGS	+=	-Wl,$(RPATH),$(PARENT_DIR)/$(LIBODIR)
 ifeq ($(os),sunos)
- LDFLAGS	+=	-Wl,--rpath -Wl,/opt/sfw/gcc-3/lib
+ LDFLAGS	+=	-Wl,$(RPATH),/opt/sfw/gcc-3/lib
 endif
 
 $(GTKMONITOR): $(OBJS)
diff --git a/src/sbbs3/gtkuseredit/GNUmakefile b/src/sbbs3/gtkuseredit/GNUmakefile
index e0fde23aefd6cd5878de0b52252f6b8f73e1c584..a35a9d0e04bf24379fc65d19bfc352e15bf855b6 100644
--- a/src/sbbs3/gtkuseredit/GNUmakefile
+++ b/src/sbbs3/gtkuseredit/GNUmakefile
@@ -24,19 +24,23 @@ endif
 vpath %.c ..
 
 CFLAGS	+=	$(SBBSDEFS) -I.. -I../../comio $(SMBLIB_CFLAGS) $(HASH_CFLAGS) $(XPDEV-MT_CFLAGS) $(JS_CFLAGS) $(CRYPT_CFLAGS) `pkg-config gtk+-3.0 --cflags`
-# Hopefully, -Wl,-E exports all symbols dynamically everywhere.
-LDFLAGS	+=	-Wl,-E -L../$(LIBODIR) $(SMBLIB_LDFLAGS) $(XPDEV-MT_LDFLAGS) $(MT_LDFLAGS)
+LDFLAGS	+=	-L../$(LIBODIR) $(SMBLIB_LDFLAGS) $(XPDEV-MT_LDFLAGS) $(MT_LDFLAGS)
 EXTRA_LIBS += `pkg-config gtk+-3.0 --libs`
 
 # Because pkg-config for libglade uses --rpath, we need to also, LD_RUN_PATH
 # won't work.  :-(
+ifeq ($(os),darwin)
+ RPATH := -rpath
+else
+ RPATH := --rpath
+endif
 ifdef SBBSDIR
- LDFLAGS	+=	-Wl,--rpath -Wl,$(SBBSDIR)/exec
+ LDFLAGS	+=	-Wl,$(RPATH),$(SBBSDIR)/exec
 endif
 PARENT_DIR = $(shell dirname `pwd`)
-LDFLAGS	+=	-Wl,--rpath -Wl,$(PARENT_DIR)/$(LIBODIR)
+LDFLAGS	+=	-Wl,$(RPATH),$(PARENT_DIR)/$(LIBODIR)
 ifeq ($(os),sunos)
- LDFLAGS	+=	-Wl,--rpath -Wl,/opt/sfw/gcc-3/lib
+ LDFLAGS	+=	-Wl,$(RPATH),/opt/sfw/gcc-3/lib
 endif
 
 $(GTKUSEREDIT): $(OBJS)
diff --git a/src/sbbs3/gtkuserlist/GNUmakefile b/src/sbbs3/gtkuserlist/GNUmakefile
index 77189edabc602272c72875682de9457955853906..356ad3ad34141eb405d2272fd637ea147ee9119f 100644
--- a/src/sbbs3/gtkuserlist/GNUmakefile
+++ b/src/sbbs3/gtkuserlist/GNUmakefile
@@ -24,19 +24,23 @@ endif
 vpath %.c ..
 
 CFLAGS	+=	$(SBBSDEFS) -I.. -I../../comio $(SMBLIB_CFLAGS) $(HASH_CFLAGS) $(XPDEV-MT_CFLAGS) $(CRYPT_CFLAGS) `pkg-config gtk+-3.0 --cflags`
-# Hopefully, -Wl,-E exports all symbols dynamically everywhere.
-LDFLAGS	+=	-Wl,-E -L../$(LIBODIR) $(SMBLIB_LDFLAGS) $(XPDEV-MT_LDFLAGS) $(MT_LDFLAGS)
+LDFLAGS	+=	-L../$(LIBODIR) $(SMBLIB_LDFLAGS) $(XPDEV-MT_LDFLAGS) $(MT_LDFLAGS)
 EXTRA_LIBS += `pkg-config gtk+-3.0 --libs`
 
 # Because pkg-config for libglade uses --rpath, we need to also, LD_RUN_PATH
 # won't work.  :-(
+ifeq ($(os),darwin)
+ RPATH := -rpath
+else
+ RPATH := --rpath
+endif
 ifdef SBBSDIR
- LDFLAGS	+=	-Wl,--rpath -Wl,$(SBBSDIR)/exec
+ LDFLAGS	+=	-Wl,$(RPATH),$(SBBSDIR)/exec
 endif
 PARENT_DIR = $(shell dirname `pwd`)
-LDFLAGS	+=	-Wl,--rpath -Wl,$(PARENT_DIR)/$(LIBODIR)
+LDFLAGS	+=	-Wl,$(RPATH),$(PARENT_DIR)/$(LIBODIR)
 ifeq ($(os),sunos)
- LDFLAGS	+=	-Wl,--rpath -Wl,/opt/sfw/gcc-3/lib
+ LDFLAGS	+=	-Wl,$(RPATH),/opt/sfw/gcc-3/lib
 endif
 
 $(GTKUSERLIST): $(OBJS)