diff --git a/src/makefiles/Makefile.freebsd b/src/makefiles/Makefile.freebsd
index 90543b7016a3f4184215f84d0f22010ec5a00466..a9e59604d5a4448c5da0cee8835f685db805ae75 100644
--- a/src/makefiles/Makefile.freebsd
+++ b/src/makefiles/Makefile.freebsd
@@ -7,7 +7,13 @@ shlib_symbolic = -Wl,-Bsymbolic -lc
 endif
 
 DLSUFFIX = .so
+
+ifeq ($(findstring sparc,$(host_cpu)), sparc)
+CFLAGS_SL = -fPIC -DPIC
+else
 CFLAGS_SL = -fpic -DPIC
+endif
+
 
 %.so: %.o
 ifdef ELF_SYSTEM
diff --git a/src/makefiles/Makefile.netbsd b/src/makefiles/Makefile.netbsd
index 59ab7a791fd42438459919c5673516513f3403d9..531fc1356b5f77433e7013f9298239634bfa7a20 100644
--- a/src/makefiles/Makefile.netbsd
+++ b/src/makefiles/Makefile.netbsd
@@ -9,7 +9,13 @@ rpath = -R$(libdir)
 endif
 
 DLSUFFIX = .so
+
+ifeq ($(findstring sparc,$(host_cpu)), sparc)
+CFLAGS_SL = -fPIC -DPIC
+else
 CFLAGS_SL = -fpic -DPIC
+endif
+
 
 %.so: %.o
 ifdef ELF_SYSTEM
@@ -21,8 +27,7 @@ else
 	@${AR} cq $@.pic `lorder $<.obj | tsort`
 	${RANLIB} $@.pic
 	@rm -f $@
-	$(LD) -x -Bshareable -Bforcearchive \
-	  -o $@ $@.pic
+	$(LD) -x -Bshareable -Bforcearchive -o $@ $@.pic
 endif
 
 sqlmansect = 7
diff --git a/src/makefiles/Makefile.openbsd b/src/makefiles/Makefile.openbsd
index 3709d24bdc28ef8819f4934abf5fb8fb040e9886..66671e675fb074a64dc5c5b1c1e16586d8c23ed7 100644
--- a/src/makefiles/Makefile.openbsd
+++ b/src/makefiles/Makefile.openbsd
@@ -7,11 +7,17 @@ shlib_symbolic = -Wl,-Bsymbolic
 endif
 
 DLSUFFIX = .so
+
+ifeq ($(findstring sparc,$(host_cpu)), sparc)
+CFLAGS_SL = -fPIC -DPIC
+else
 CFLAGS_SL = -fpic -DPIC
+endif
+
 
 %.so: %.o
 ifdef ELF_SYSTEM
-	$(LD) -x -Bshareable -o $@ $<
+	$(CC) -shared -o $@ $<
 else
 	$(LD) $(LDREL) $(LDOUT) $<.obj -x $<
 	@echo building shared object $@
@@ -19,8 +25,7 @@ else
 	@${AR} cq $@.pic `lorder $<.obj | tsort`
 	${RANLIB} $@.pic
 	@rm -f $@
-	$(LD) -x -Bshareable -Bforcearchive \
-	  -o $@ $@.pic
+	$(LD) -x -Bshareable -Bforcearchive -o $@ $@.pic
 endif
 
 sqlmansect = 7