rlm@1: // Common/InitializeStaticLib.h rlm@1: // rlm@1: // it's necessary to include this from one cpp file in order to use 7zip as a static library, rlm@1: // otherwise the linker will optimize away some important internals of 7zip. rlm@1: rlm@1: #ifndef __COMMON_INITIALIZESTATICLIB_H rlm@1: #define __COMMON_INITIALIZESTATICLIB_H rlm@1: rlm@1: #define FORCE_REF(dec, var) extern dec var; void* var##ref = (void*)&var; rlm@1: rlm@1: #include "../7zip/Common/DeclareCodecs.h" rlm@1: #include "../7zip/Common/DeclareArcs.h" rlm@1: rlm@1: FORCE_REF(struct CCRCTableInit, g_CRCTableInit) rlm@1: rlm@1: rlm@1: // these don't seem to be necessary with my compiler, rlm@1: // but they're here in case a different compiler more aggressively strips out unreferenced code rlm@1: FORCE_REF(class CBZip2CrcTableInit, g_BZip2CrcTableInit) rlm@1: namespace NCrypto { struct CAesTabInit; FORCE_REF(CAesTabInit, g_AesTabInit) } rlm@1: namespace NBitl { struct CInverterTableInitializer; FORCE_REF(CInverterTableInitializer, g_InverterTableInitializer) } rlm@1: namespace NCompress { namespace NRar3 { class CDistInit; FORCE_REF(CDistInit, g_DistInit) }} rlm@1: namespace NArchive { namespace NLzh { class CCRCTableInit; FORCE_REF(CCRCTableInit, g_CRCTableInit) }} rlm@1: namespace NArchive { namespace N7z { class SignatureInitializer; FORCE_REF(SignatureInitializer, g_SignatureInitializer) }} rlm@1: namespace NArchive{ namespace NRar{ namespace NHeader{ class CMarkerInitializer; FORCE_REF(CMarkerInitializer, g_MarkerInitializer) }}} rlm@1: namespace NArchive { namespace NZip { namespace NSignature{ class CMarkersInitializer; FORCE_REF(CMarkersInitializer, g_MarkerInitializer) }}} rlm@1: rlm@1: rlm@1: #endif