diff --git a/CMakeLists.txt b/CMakeLists.txt index 4ba060bbc..e9fbfc71f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -181,10 +181,12 @@ set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}) # Create an object library for the driver (single build) if(NOT CMAKE_VERSION VERSION_LESS "2.8.8") + cmake_policy(SET CMP0063 NEW) add_library(cpp-driver OBJECT ${CASS_ALL_SOURCE_FILES}) if(NOT WIN32) set_property(TARGET cpp-driver PROPERTY COMPILE_FLAGS "${CASS_DRIVER_CXX_FLAGS} -fPIC") endif() + set_target_properties(cpp-driver PROPERTIES CXX_VISIBILITY_PRESET hidden) # Build both shared and static libraries set(CASS_BUILD_SHARED ON) @@ -198,6 +200,7 @@ include_directories(${CASS_INCLUDES}) if(CASS_BUILD_SHARED) if(CMAKE_VERSION VERSION_LESS "2.8.8") add_library(${PROJECT_LIB_NAME} SHARED ${CASS_ALL_SOURCE_FILES}) + set_target_properties(${PROJECT_LIB_NAME} PROPERTIES CXX_VISIBILITY_PRESET hidden) else() add_library(${PROJECT_LIB_NAME} SHARED $) endif() diff --git a/src/address.hpp b/src/address.hpp index cb608d81f..aa5e6b7dd 100644 --- a/src/address.hpp +++ b/src/address.hpp @@ -18,6 +18,7 @@ #define __CASS_ADDRESS_HPP_INCLUDED__ #include "hash.hpp" +#include "macros.hpp" #include @@ -29,7 +30,7 @@ namespace cass { -class Address { +class CASS_IMPL_EXPORT Address { public: static const Address EMPTY_KEY; static const Address DELETED_KEY; diff --git a/src/get_time.hpp b/src/get_time.hpp index 34cc1d75d..2221fe028 100644 --- a/src/get_time.hpp +++ b/src/get_time.hpp @@ -19,6 +19,8 @@ #include +#include "macros.hpp" + #define NANOSECONDS_PER_MICROSECOND 1000LL #define NANOSECONDS_PER_MILLISECOND 1000000LL #define NANOSECONDS_PER_SECOND 1000000000LL @@ -27,7 +29,7 @@ namespace cass { -uint64_t get_time_since_epoch_us(); +CASS_IMPL_EXPORT uint64_t get_time_since_epoch_us(); inline uint64_t get_time_since_epoch_ms() { return get_time_since_epoch_us() / MICROSECONDS_PER_MILLISECOND; diff --git a/src/macros.hpp b/src/macros.hpp index 81f11bb1a..7fe738429 100644 --- a/src/macros.hpp +++ b/src/macros.hpp @@ -77,4 +77,20 @@ struct StaticNextPow2 { enum { value = StaticNextPow2Helper<8 * sizeof(size_t) - 1, N>::value }; }; +#if !defined(CASS_STATIC) +# if (defined(WIN32) || defined(_WIN32)) +# if defined(CASS_BUILDING) +# define CASS_IMPL_EXPORT __declspec(dllexport) +# else +# define CASS_IMPL_EXPORT __declspec(dllexport) +# endif +# elif (defined(__SUNPRO_C) || defined(__SUNPRO_CC)) && !defined(CASS_STATIC) +# define CASS_IMPL_EXPORT __global +# elif (defined(__GNUC__) && __GNUC__ >= 4) || defined(__INTEL_COMPILER) +# define CASS_IMPL_EXPORT __attribute__ ((visibility("default"))) +# endif +#else +#define CASS_IMPL_EXPORT +#endif + #endif diff --git a/src/timestamp_generator.hpp b/src/timestamp_generator.hpp index af7000fb5..ee4240577 100644 --- a/src/timestamp_generator.hpp +++ b/src/timestamp_generator.hpp @@ -59,7 +59,7 @@ class ServerSideTimestampGenerator : public TimestampGenerator { virtual int64_t next() { return CASS_INT64_MIN; } }; -class MonotonicTimestampGenerator : public TimestampGenerator { +class CASS_IMPL_EXPORT MonotonicTimestampGenerator : public TimestampGenerator { public: MonotonicTimestampGenerator(int64_t warning_threshold_us = 1000000, int64_t warning_interval_ms = 1000) diff --git a/src/utils.hpp b/src/utils.hpp index 2cf677014..cf97b5402 100644 --- a/src/utils.hpp +++ b/src/utils.hpp @@ -82,7 +82,7 @@ inline size_t next_pow_2(size_t num) { std::string opcode_to_string(int opcode); -void explode(const std::string& str, std::vector& vec, const char delimiter = ','); +CASS_IMPL_EXPORT void explode(const std::string& str, std::vector& vec, const char delimiter = ','); std::string& trim(std::string& str);