diff --git a/lib/c/Makefile b/lib/c/Makefile
index 960854837335b0884262cac262715ab4bae7e385..4dcf336f0bdf936045f25692e75d937505b1918c 100644
--- a/lib/c/Makefile
+++ b/lib/c/Makefile
@@ -1,12 +1,15 @@
 ## Macros
 
-# Use LLVM clang if it's found.
-CC = $(shell hash clang 2>/dev/null && echo clang || echo gcc)
-CFLAGS = -g -Wall -Werror -O3  -I. -Itest -DLABCOMM_ENCODER_LINEAR_SEARCH
-LDFLAGS = -L.
-LDLIBS_TEST = -Tlabcomm.linkscript  -lcunit -llabcomm
+CC=gcc
+CFLAGS=-g -Wall -Werror -O3  -I. -Itest -DLABCOMM_ENCODER_LINEAR_SEARCH
+LDFLAGS=-L.
+#LDLIBS_TEST=-Tlabcomm.linkscript  -lcunit -llabcomm
+LDLIBS_TEST=-lcunit -llabcomm
+
+OBJS= labcomm.o \
+      labcomm_dynamic_buffer_writer.o labcomm_fd_reader.o labcomm_fd_writer.o \
+      labcomm_pthread_mutex_lock.o
 
-OBJS= labcomm.o labcomm_dynamic_buffer_writer.o labcomm_fd_reader.o labcomm_fd_writer.o 
 #FIXME: labcomm_mem_reader.o labcomm_mem_writer.o
 LABCOMM_JAR=../../compiler/labComm.jar
 LABCOMM=java -jar $(LABCOMM_JAR) 
@@ -35,11 +38,13 @@ endif
 
 .PHONY: all run-test clean distclean
 
-all: liblabcomm.a 
+all: liblabcomm.a liblabcomm.so.1 
 
 liblabcomm.a: $(OBJS)
 	ar -r liblabcomm.a $^
 
+liblabcomm.so.1: $(OBJS:%.o=%.pic.o)
+	gcc -shared -Wl,-soname,$@ -o $@ $^ -lc
 
 labcomm.o : labcomm.c labcomm.h  labcomm_private.h
 
@@ -85,6 +90,9 @@ $(LABCOMM_JAR):
 	cd $(shell dirname $(LABCOMM_JAR)); ant jar
 	@echo "======End building LabComm compiler======"
 
+%.pic.o:	%.c
+	$(CC) -fPIC $(CFLAGS) -c -o $@ $<
+
 %.o: %.c %.h
 
 clean:
@@ -98,6 +106,7 @@ clean:
 	$(RM) $(TEST_DIR)/test_labcomm
 
 distclean: clean
+	$(RM) liblabcomm.so.1
 	$(RM) liblabcomm.a
 
 # Extra dependencies
diff --git a/lib/c/labcomm_private.h b/lib/c/labcomm_private.h
index b6af148b70b2634676b819c74b15a0768fc35c90..60c0ce2d9bbd6a21f5c1135ce957be9bf06bc3da 100644
--- a/lib/c/labcomm_private.h
+++ b/lib/c/labcomm_private.h
@@ -44,6 +44,12 @@
 #define LABCOMM_DECLARE_SIGNATURE(name) \
   struct labcomm_signature name __attribute__((section("labcomm")))
 
+/*
+ * Semi private lock declarations
+ */
+struct labcomm_lock {
+};
+
 /*
  * Semi private decoder declarations
  */
diff --git a/lib/c/liblabcomm.so b/lib/c/liblabcomm.so
new file mode 100644
index 0000000000000000000000000000000000000000..3f4a85c7ab3952654b5794a98a88bd09c4a06172
--- /dev/null
+++ b/lib/c/liblabcomm.so
@@ -0,0 +1,2 @@
+/*INPUT(liblabcomm.so.1 -ltinfo)*/
+INPUT(liblabcomm.a)