diff --git a/c-sdk/config/FreeBSD.mk b/c-sdk/config/FreeBSD.mk
--- ldap/sdks/c-sdk/config/FreeBSD.mk
+++ ldap/sdks/c-sdk/config/FreeBSD.mk
@@ -79,8 +79,8 @@ DLL_SUFFIX		= so.1.0
 endif
 
 DSO_CFLAGS		= -fPIC
-DSO_LDOPTS		= -Bshareable
+DSO_LDOPTS		= -shared -Wl,-soname,$(notdir $@)
 
-MKSHLIB			= $(LD) $(DSO_LDOPTS)
+MKSHLIB			= $(CC) $(DSO_LDOPTS)
 
 G++INCLUDES		= -I/usr/include/g++
diff --git a/c-sdk/configure b/c-sdk/configure
--- ldap/sdks/c-sdk/configure
+++ ldap/sdks/c-sdk/configure
@@ -4241,8 +4241,10 @@ EOF
 #define DRAGONFLY 1
 EOF
 
+    LD='$(CC)'
+    MKSHLIB='$(CC) $(DSO_LDOPTS) -o $@'
     DSO_CFLAGS=-fPIC
-    DSO_LDOPTS='-shared'
+    DSO_LDOPTS='-shared -Wl,-soname,$(notdir $@)'
 	;;
 
 *-freebsd*)
@@ -4261,6 +4263,7 @@ EOF
 #define HAVE_BSD_FLOCK 1
 EOF
 
+    LD='$(CC)'
     CFLAGS="$CFLAGS $(DSO_CFLAGS) -ansi -Wall"
     MOZ_OBJFORMAT=`test -x /usr/bin/objformat && /usr/bin/objformat || echo elf`
     if test "$MOZ_OBJFORMAT" = "elf"; then
@@ -4268,8 +4271,9 @@ EOF
     else
         DLL_SUFFIX=so.1.0
     fi
+    MKSHLIB='$(CC) $(DSO_LDOPTS) -o $@'
     DSO_CFLAGS=-fPIC
-    DSO_LDOPTS=-Bshareable
+    DSO_LDOPTS='-shared -Wl,-soname,$(notdir $@)'
     ;;
 
 *-hpux*)
@@ -6512,8 +6516,15 @@ echo "configure:6510: checking whether $
    if test $? -eq 0; then
 	if test -z "`egrep -i '(unrecognize|unknown)' conftest.out | grep pthread`" && test -z "`egrep -i '(error|incorrect)' conftest.out`" ; then
 	    ac_cv_have_dash_pthread=yes
-	    CFLAGS="$CFLAGS -pthread"
-	    CXXFLAGS="$CXXFLAGS -pthread"
+		case "$target_os" in
+	    dragonfly*|freebsd*)
+# Freebsd doesn't use -pthread for compiles, it uses them for linking
+            ;;
+	    *)
+            CFLAGS="$CFLAGS -pthread"
+            CXXFLAGS="$CXXFLAGS -pthread"
+            ;;
+        esac
 	fi
     fi
     rm -f conftest*
@@ -6542,7 +6553,22 @@ echo "configure:6526: checking whether $
             _PTHREAD_LDFLAGS=
         fi
 	    ;;
-    *-freebsd*|*-openbsd*|*-bsdi*|*-netbsd*)
+    *-dragonfly*|*-freebsd*)
+	    cat >> confdefs.h <<\EOF
+#define _REENTRANT 1
+EOF
+
+	    cat >> confdefs.h <<\EOF
+#define _THREAD_SAFE 1
+EOF
+
+	    	    if test "$ac_cv_have_dash_pthread" = "yes"; then
+	        _PTHREAD_LDFLAGS="-pthread"
+	    else
+	        _PTHREAD_LDFLAGS="-lc_r"
+	    fi
+	    ;;
+    *-openbsd*|*-bsdi*|*-netbsd*)
 	    cat >> confdefs.h <<\EOF
 #define _THREAD_SAFE 1
 EOF
diff --git a/c-sdk/configure.in b/c-sdk/configure.in
--- ldap/sdks/c-sdk/configure.in
+++ ldap/sdks/c-sdk/configure.in
@@ -1225,8 +1225,10 @@ tools are selected during the Xcode/Deve
     fi
     AC_DEFINE(XP_UNIX)
     AC_DEFINE(DRAGONFLY)
+    LD='$(CC)'
+    MKSHLIB='$(CC) $(DSO_LDOPTS) -o $@'
     DSO_CFLAGS=-fPIC
-    DSO_LDOPTS='-shared'
+    DSO_LDOPTS='-shared -Wl,-soname,$(notdir $@)'
 	;;
 
 *-freebsd*)
@@ -1236,6 +1238,7 @@ tools are selected during the Xcode/Deve
     AC_DEFINE(XP_UNIX)
     AC_DEFINE(FREEBSD)
     AC_DEFINE(HAVE_BSD_FLOCK)
+    LD='$(CC)'
     CFLAGS="$CFLAGS $(DSO_CFLAGS) -ansi -Wall"
     MOZ_OBJFORMAT=`test -x /usr/bin/objformat && /usr/bin/objformat || echo elf`
     if test "$MOZ_OBJFORMAT" = "elf"; then
@@ -1243,8 +1246,9 @@ tools are selected during the Xcode/Deve
     else
         DLL_SUFFIX=so.1.0
     fi
+    MKSHLIB='$(CC) $(DSO_LDOPTS) -o $@'
     DSO_CFLAGS=-fPIC
-    DSO_LDOPTS=-Bshareable
+    DSO_LDOPTS='-shared -Wl,-soname,$(notdir $@)'
     ;;
 
 *-hpux*)
@@ -2329,8 +2333,15 @@ if test -n "$USE_PTHREADS"; then
    if test $? -eq 0; then
 	if test -z "`egrep -i '(unrecognize|unknown)' conftest.out | grep pthread`" && test -z "`egrep -i '(error|incorrect)' conftest.out`" ; then
 	    ac_cv_have_dash_pthread=yes
-	    CFLAGS="$CFLAGS -pthread"
-	    CXXFLAGS="$CXXFLAGS -pthread"
+		case "$target_os" in
+	    dragonfly*|freebsd*)
+# Freebsd doesn't use -pthread for compiles, it uses them for linking
+            ;;
+	    *)
+            CFLAGS="$CFLAGS -pthread"
+            CXXFLAGS="$CXXFLAGS -pthread"
+            ;;
+        esac
 	fi
     fi
     rm -f conftest*
@@ -2361,7 +2372,17 @@ if test -n "$USE_PTHREADS"; then
             _PTHREAD_LDFLAGS=
         fi
 	    ;;
-    *-freebsd*|*-openbsd*|*-bsdi*|*-netbsd*)
+    *-dragonfly*|*-freebsd*)
+	    AC_DEFINE(_REENTRANT)
+	    AC_DEFINE(_THREAD_SAFE)
+	    dnl -pthread links in -lc_r, so don't specify it explicitly.
+	    if test "$ac_cv_have_dash_pthread" = "yes"; then
+	        _PTHREAD_LDFLAGS="-pthread"
+	    else
+	        _PTHREAD_LDFLAGS="-lc_r"
+	    fi
+	    ;;
+    *-openbsd*|*-bsdi*|*-netbsd*)
 	    AC_DEFINE(_THREAD_SAFE)
 	    dnl -pthread links in -lc_r, so don't specify it explicitly.
 	    if test "$ac_cv_have_dash_pthread" = "yes"; then
