visibility control macros
diff --git a/include/libbz3.h b/include/libbz3.h
index c0e272c..ec8f456 100644
--- a/include/libbz3.h
+++ b/include/libbz3.h
@@ -22,8 +22,21 @@
#include <stdint.h>
-#ifndef BZIP3_API
- #define BZIP3_API
+/* Symbol visibility control. */
+#ifndef BZIP3_VISIBLE
+ #if defined(__GNUC__) && (__GNUC__ >= 4) && !defined(__MINGW32__)
+ #define BZIP3_VISIBLE __attribute__ ((visibility ("default")))
+ #else
+ #define BZIP3_VISIBLE
+ #endif
+#endif
+
+#if defined(BZIP3_DLL_EXPORT) && (BZIP3_DLL_EXPORT==1)
+ #define BZIP3_API __declspec(dllexport) BZIP3_VISIBLE
+#elif defined(BZIP3_DLL_IMPORT) && (BZIP3_DLL_IMPORT==1)
+ #define BZIP3_API __declspec(dllimport) BZIP3_VISIBLE
+#else
+ #define BZIP3_API BZIP3_VISIBLE
#endif
#define BZ3_OK 0
