Improve MacOS support

Change-Id: Id54a73c025d01ee37d2373a62506eb52a4f75d35
diff --git a/src/collocatordb.cc b/src/collocatordb.cc
index 52cbc27..2660346 100644
--- a/src/collocatordb.cc
+++ b/src/collocatordb.cc
@@ -17,6 +17,7 @@
 #include <rocksdb/merge_operator.h>
 #include <rocksdb/slice_transform.h>
 #include "merge_operators.h"
+#include "export.h"
 
 #define WINDOW_SIZE 5
 #define FREQUENCY_THRESHOLD 5
@@ -842,23 +843,23 @@
 #pragma clang diagnostic push
 #pragma ide diagnostic ignored "OCUnusedGlobalDeclarationInspection"
 #endif
-  COLLOCATORS *open_collocatordb_for_write(char *dbname) {
+  DLL_EXPORT COLLOCATORS *open_collocatordb_for_write(char *dbname) {
 		return new rocksdb::CollocatorDB(dbname, false);
 	}
 
-	COLLOCATORS *open_collocatordb(char *dbname) {
+	DLL_EXPORT COLLOCATORS *open_collocatordb(char *dbname) {
 		return new rocksdb::CollocatorDB(dbname, true);
 	}
 	
-	void inc_collocator(COLLOCATORS *db, uint32_t w1, uint32_t w2, int8_t dist) {
+	DLL_EXPORT void inc_collocator(COLLOCATORS *db, uint32_t w1, uint32_t w2, int8_t dist) {
 		db->inc(w1, w2, dist);
 	}
 
-  void dump_collocators(COLLOCATORS *db, uint32_t w1, uint32_t w2, int8_t dist) {
+  DLL_EXPORT void dump_collocators(COLLOCATORS *db, uint32_t w1, uint32_t w2, int8_t dist) {
     db->dump(w1, w2, dist);
   }
 
-  COLLOCATORS *get_collocators(COLLOCATORS *db, uint32_t w1) {
+  DLL_EXPORT COLLOCATORS *get_collocators(COLLOCATORS *db, uint32_t w1) {
     std::vector<Collocator> c = db->get_collocators(w1);
     if (c.empty())
       return NULL;
@@ -868,7 +869,7 @@
     return p;
   }
 
-  COLLOCATORS *get_collocation_scores(COLLOCATORS *db, uint32_t w1, uint32_t w2) {
+  DLL_EXPORT COLLOCATORS *get_collocation_scores(COLLOCATORS *db, uint32_t w1, uint32_t w2) {
     std::vector<Collocator> c = db->get_collocation_scores(w1, w2);
     if (c.empty())
       return NULL;
@@ -878,20 +879,20 @@
     return p;
   }
 
-  char *get_word(COLLOCATORS *db, uint32_t w) {
+  DLL_EXPORT char *get_word(COLLOCATORS *db, uint32_t w) {
     return strdup(db->getWord(w).c_str());
   }
 
-  void read_vocab(COLLOCATORS *db, char *fname) {
+  DLL_EXPORT void read_vocab(COLLOCATORS *db, char *fname) {
     std::string fName(fname);
     db->readVocab(fName);
   }
 
-  const char *get_collocators_as_json(COLLOCATORS *db, uint32_t w1) {
+  DLL_EXPORT const char *get_collocators_as_json(COLLOCATORS *db, uint32_t w1) {
     return strdup(db->collocators2json(w1, db->get_collocators(w1)).c_str());
   }
 
-  const char *get_collocation_scores_as_json(COLLOCATORS *db, uint32_t w1, uint32_t w2) {
+  DLL_EXPORT const char *get_collocation_scores_as_json(COLLOCATORS *db, uint32_t w1, uint32_t w2) {
     return strdup(db->collocators2json(w1, db->get_collocation_scores(w1, w2)).c_str());
   }
 
diff --git a/src/export.h b/src/export.h
new file mode 100644
index 0000000..b4ff5d2
--- /dev/null
+++ b/src/export.h
@@ -0,0 +1,16 @@
+// export.h
+
+#ifndef EXPORT_H
+#define EXPORT_H
+
+#ifdef _WIN32
+    #ifdef BUILDING_DLL
+        #define DLL_EXPORT __declspec(dllexport)
+    #else
+        #define DLL_EXPORT __declspec(dllimport)
+    #endif
+#else
+    #define DLL_EXPORT __attribute__((visibility("default")))
+#endif
+
+#endif // EXPORT_H