diff --git a/libyara/include/yara/utils.h b/libyara/include/yara/utils.h
index 92cb1036..04f607ce 100644
--- a/libyara/include/yara/utils.h
+++ b/libyara/include/yara/utils.h
@@ -54,21 +54,38 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#define EXTERNC
#endif
-#if defined(__GNUC__)
-#define YR_API EXTERNC __attribute__((visibility("default")))
-#elif defined(_MSC_VER)
-#define YR_API EXTERNC __declspec(dllexport)
+
+#if defined(_WIN32) || defined(__CYGWIN__)
+ #ifdef YR_BUILDING_DLL
+ #ifdef __GNUC__
+ #define YR_API EXTERNC __attribute_((dllexport))
+ #define YR_DEPRECATED_API EXTERNC __attribute__((deprecated))
+ #else
+ #define YR_API EXTERNC __declspec(dllexport)
+ #define YR_DEPRECATED_API EXTERNC __declspec(deprecated)
+ #endif
+ #elif defined(YR_IMPORTING_DLL)
+ #ifdef __GNUC__
+ #define YR_API EXTERNC __attribute__((dllimport))
+ #define YR_DEPRECATED_API EXTERNC __attribute__((deprecated))
+ #else
+ #define YR_API EXTERNC __declspec(dllimport)
+ #define YR_DEPRECATED_API EXTERNC __declspec(deprecated)
+ #endif
+ #else
+ #define YR_API EXTERNC
+ #define YR_DEPRECATED_API EXTERNC
+ #endif
#else
-#define YR_API EXTERNC
+ #if __GNUC__ >= 4
+ #define YR_API EXTERNC __attribute__((visibility ("default")))
+ #define YR_DEPRECATED_API EXTERNC __attribute__((deprecated))
+ #else
+ #define YR_API EXTERNC
+ #define YR_DEPRECATED_API EXTERNC
+ #endif
#endif
-#if defined(__GNUC__)
-#define YR_DEPRECATED_API EXTERNC __attribute__((deprecated))
-#elif defined(_MSC_VER)
-#define YR_DEPRECATED_API EXTERNC __declspec(deprecated)
-#else
-#define YR_DEPRECATED_API EXTERNC
-#endif
#if defined(__GNUC__)
#define YR_ALIGN(n) __attribute__((aligned(n)))
diff --git a/windows/vs2015/libyara/libyara.vcxproj b/windows/vs2015/libyara/libyara.vcxproj
index 8cb39243..e79180e3 100644
--- a/windows/vs2015/libyara/libyara.vcxproj
+++ b/windows/vs2015/libyara/libyara.vcxproj
@@ -78,7 +78,7 @@
- _CRT_SECURE_NO_WARNINGS;CUCKOO_MODULE;HASH_MODULE;DOTNET_MODULE;HAVE_LIBCRYPTO;USE_WINDOWS_PROC
+ _CRT_SECURE_NO_WARNINGS;CUCKOO_MODULE;HASH_MODULE;DOTNET_MODULE;HAVE_LIBCRYPTO;USE_WINDOWS_PROC;YR_BUILDING_STATIC_LIB
..\..\..\libyara;..\..\..\libyara\include;..\..\..;..\packages\YARA.Jansson.x86.1.1.0\include;..\packages\YARA.OpenSSL.x86.1.1.0\include;%(AdditionalIncludeDirectories)
4005;4273;4090
CompileAsCpp
@@ -105,7 +105,7 @@
- _CRT_SECURE_NO_WARNINGS;CUCKOO_MODULE;HASH_MODULE;DOTNET_MODULE;HAVE_LIBCRYPTO;USE_WINDOWS_PROC
+ _CRT_SECURE_NO_WARNINGS;CUCKOO_MODULE;HASH_MODULE;DOTNET_MODULE;HAVE_LIBCRYPTO;USE_WINDOWS_PRO;YR_BUILDING_STATIC_LIBC
..\..\..\libyara;..\..\..\libyara\include;..\..\..;..\packages\YARA.Jansson.x64.1.1.0\include;..\packages\YARA.OpenSSL.x64.1.1.0\include;%(AdditionalIncludeDirectories)
4005;4273;4090
CompileAsCpp
@@ -132,7 +132,7 @@
- _CRT_SECURE_NO_WARNINGS;CUCKOO_MODULE;HASH_MODULE;DOTNET_MODULE;HAVE_LIBCRYPTO;USE_WINDOWS_PROC
+ _CRT_SECURE_NO_WARNINGS;CUCKOO_MODULE;HASH_MODULE;DOTNET_MODULE;HAVE_LIBCRYPTO;USE_WINDOWS_PROC;YR_BUILDING_STATIC_LIB
..\..\..\libyara;..\..\..\libyara\include;..\..\..;..\packages\YARA.Jansson.x86.1.1.0\include;..\packages\YARA.OpenSSL.x86.1.1.0\include;%(AdditionalIncludeDirectories)
4005;4273;4090
CompileAsCpp
@@ -157,7 +157,7 @@
- _CRT_SECURE_NO_WARNINGS;CUCKOO_MODULE;HASH_MODULE;DOTNET_MODULE;HAVE_LIBCRYPTO;USE_WINDOWS_PROC
+ _CRT_SECURE_NO_WARNINGS;CUCKOO_MODULE;HASH_MODULE;DOTNET_MODULE;HAVE_LIBCRYPTO;USE_WINDOWS_PROC;YR_BUILDING_STATIC_LIB
..\..\..\libyara;..\..\..\libyara\include;..\..\..;..\packages\YARA.Jansson.x64.1.1.0\include;..\packages\YARA.OpenSSL.x64.1.1.0\include;%(AdditionalIncludeDirectories)
4005;4273;4090
CompileAsCpp