Hello all,

I have the same problem as you do. I tried to fix 5.2.1 <anonymous enum> 
problems by rewriting them into "static const unsigned int" contants, this 
overcame compilation problem but the result was hundreds of "undefined 
reference" linker errors.

I did the same as Dave (checked out 5.3 from CVS), and compiled everything 
successfully with "gcc (GCC) 4.0.1 (Debian 4.0.1-2)" (including osrng.cpp)! 
But linkage resulted again into those undefined references to templates:

bench.o:(.gnu.linkonce.r._ZTVN8CryptoPP3MD5E[vtable for CryptoPP::MD5]+0x18): 
undefined reference to `CryptoPP::IteratedHashBase<unsigned int, 
CryptoPP::HashTransformation>::Update(unsigned char const*, unsigned int)'

This is of course caused by changes relating template instantiation introduced 
in GCC 4.0. In crypto++ templates like IteratedHashBase are explicitly 
instantiated (in header files) before the their methods are defined in 
dll.cpp. This could be fixed by skipping these instantiations and header 
files and forcing them in dll.cpp.

I have a quick-patch (see below), but I'm not completely sure whether it fixes 
all problems (I'm using only DSA and SHA in my application yet) by 
cryptest.exe links and runs fine.
I believe there can be more clear way how to fix this, but for the time being 
at least this helps :-).
 
Regards,
Jozef Matula



diff -ru cryptopp/cryptlib.h cryptopp.fixed/cryptlib.h
--- cryptopp/cryptlib.h 2005-07-13 04:19:10.000000000 +0200
+++ cryptopp.fixed/cryptlib.h   2005-07-23 14:30:36.000000000 +0200
@@ -521,6 +521,8 @@
 class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE HashTransformation : public Algorithm
 {
 public:
+       virtual ~HashTransformation() { }
+
        //! process more input
        virtual void Update(const byte *input, size_t length) =0;
 
@@ -604,9 +606,11 @@
 typedef SimpleKeyedTransformation<HashTransformation> 
MessageAuthenticationCode;
 #endif
 
+#ifndef SKIP_EXPLICIT_INSTANTIATION
 CRYPTOPP_DLL_TEMPLATE_CLASS SimpleKeyedTransformation<BlockTransformation>;
 CRYPTOPP_DLL_TEMPLATE_CLASS SimpleKeyedTransformation<StreamTransformation>;
 CRYPTOPP_DLL_TEMPLATE_CLASS SimpleKeyedTransformation<HashTransformation>;
+#endif // SKIP_EXPLICIT_INSTANTIATION
 
 #ifdef CRYPTOPP_MAINTAIN_BACKWARDS_COMPATIBILITY
 typedef SymmetricCipher StreamCipher;
diff -ru cryptopp/dll.cpp cryptopp.fixed/dll.cpp
--- cryptopp/dll.cpp    2005-01-20 05:19:35.000000000 +0100
+++ cryptopp.fixed/dll.cpp      2005-07-23 14:40:51.000000000 +0200
@@ -3,6 +3,10 @@
 #define CRYPTOPP_MANUALLY_INSTANTIATE_TEMPLATES
 #define CRYPTOPP_DEFAULT_NO_DLL
 
+#if defined(__GNUC__) && __GNUC__ > 3
+#define SKIP_EXPLICIT_INSTANTIATION
+#endif
+
 #include "dll.h"
 #pragma warning(default: 4660)
 
@@ -37,6 +41,57 @@
 CRYPTOPP_DLL_TEMPLATE_CLASS AbstractEuclideanDomain<Integer>;
 #endif
 
+#if defined(__GNUC__) && __GNUC__ > 3
+CRYPTOPP_DLL_TEMPLATE_CLASS DL_GroupParameters_EC<ECP>;
+CRYPTOPP_DLL_TEMPLATE_CLASS DL_GroupParameters_EC<EC2N>;
+CRYPTOPP_DLL_TEMPLATE_CLASS DL_FixedBasePrecomputationImpl<Integer>;
+CRYPTOPP_DLL_TEMPLATE_CLASS IteratedHashBase<word64, HashTransformation>;
+CRYPTOPP_DLL_TEMPLATE_CLASS IteratedHashBase<word32, HashTransformation>;
+CRYPTOPP_DLL_TEMPLATE_CLASS IteratedHashBase<word32, 
MessageAuthenticationCode>;
+CRYPTOPP_DLL_TEMPLATE_CLASS IteratedHashBase<word64, 
MessageAuthenticationCode>;
+CRYPTOPP_DLL_TEMPLATE_CLASS 
CFB_CipherTemplate<AbstractPolicyHolder<CFB_CipherAbstractPolicy, 
CFB_ModePolicy> >;
+CRYPTOPP_DLL_TEMPLATE_CLASS 
CFB_EncryptionTemplate<AbstractPolicyHolder<CFB_CipherAbstractPolicy, 
CFB_ModePolicy> >;
+CRYPTOPP_DLL_TEMPLATE_CLASS 
CFB_DecryptionTemplate<AbstractPolicyHolder<CFB_CipherAbstractPolicy, 
CFB_ModePolicy> >;
+CRYPTOPP_DLL_TEMPLATE_CLASS AdditiveCipherTemplate<>;
+CRYPTOPP_DLL_TEMPLATE_CLASS 
AdditiveCipherTemplate<AbstractPolicyHolder<AdditiveCipherAbstractPolicy, 
OFB_ModePolicy> >;
+CRYPTOPP_DLL_TEMPLATE_CLASS 
AdditiveCipherTemplate<AbstractPolicyHolder<AdditiveCipherAbstractPolicy, 
CTR_ModePolicy> >;
+CRYPTOPP_DLL_TEMPLATE_CLASS AbstractEuclideanDomain<Integer>;
+CRYPTOPP_DLL_TEMPLATE_CLASS 
CFB_CipherTemplate<AbstractPolicyHolder<CFB_CipherAbstractPolicy, 
SymmetricCipher> >;
+CRYPTOPP_DLL_TEMPLATE_CLASS CFB_EncryptionTemplate<>;
+CRYPTOPP_DLL_TEMPLATE_CLASS CFB_DecryptionTemplate<>;
+CRYPTOPP_DLL_TEMPLATE_CLASS AbstractGroup<PolynomialMod2>;
+CRYPTOPP_DLL_TEMPLATE_CLASS AbstractRing<PolynomialMod2>;
+CRYPTOPP_DLL_TEMPLATE_CLASS AbstractEuclideanDomain<PolynomialMod2>;
+CRYPTOPP_DLL_TEMPLATE_CLASS EuclideanDomainOf<PolynomialMod2>;
+CRYPTOPP_DLL_TEMPLATE_CLASS QuotientRing<EuclideanDomainOf<PolynomialMod2> >;
+CRYPTOPP_DLL_TEMPLATE_CLASS 
CipherModeFinalTemplate_ExternalCipher<ECB_OneWay>;
+CRYPTOPP_DLL_TEMPLATE_CLASS 
CipherModeFinalTemplate_ExternalCipher<CBC_Encryption>;
+CRYPTOPP_DLL_TEMPLATE_CLASS 
CipherModeFinalTemplate_ExternalCipher<CBC_Decryption>;
+CRYPTOPP_DLL_TEMPLATE_CLASS 
CipherModeFinalTemplate_ExternalCipher<CBC_CTS_Encryption>;
+CRYPTOPP_DLL_TEMPLATE_CLASS 
CipherModeFinalTemplate_ExternalCipher<CBC_CTS_Decryption>;
+CRYPTOPP_DLL_TEMPLATE_CLASS AbstractGroup<EC2NPoint>;
+CRYPTOPP_DLL_TEMPLATE_CLASS AbstractGroup<ECPPoint>;
+CRYPTOPP_DLL_TEMPLATE_CLASS DL_FixedBasePrecomputationImpl<EC2N::Point>;
+CRYPTOPP_DLL_TEMPLATE_CLASS DL_GroupPrecomputation<EC2N::Point>;
+CRYPTOPP_DLL_TEMPLATE_CLASS DL_PublicKey_EC<ECP>;
+CRYPTOPP_DLL_TEMPLATE_CLASS DL_PublicKey_EC<EC2N>;
+CRYPTOPP_DLL_TEMPLATE_CLASS DL_PrivateKeyImpl<DL_GroupParameters_EC<ECP> >;
+CRYPTOPP_DLL_TEMPLATE_CLASS DL_PrivateKeyImpl<DL_GroupParameters_EC<EC2N> >;
+CRYPTOPP_DLL_TEMPLATE_CLASS 
DL_PrivateKey_WithSignaturePairwiseConsistencyTest<DL_PrivateKey_EC<ECP>, 
ECDSA<ECP> >;
+CRYPTOPP_DLL_TEMPLATE_CLASS 
DL_PrivateKey_WithSignaturePairwiseConsistencyTest<DL_PrivateKey_EC<EC2N>, 
ECDSA<EC2N> >;
+CRYPTOPP_DLL_TEMPLATE_CLASS DL_PrivateKey_EC<ECP>;
+CRYPTOPP_DLL_TEMPLATE_CLASS DL_PrivateKey_EC<EC2N>;
+CRYPTOPP_DLL_TEMPLATE_CLASS DL_Algorithm_GDSA<ECP::Point>;
+CRYPTOPP_DLL_TEMPLATE_CLASS DL_Algorithm_GDSA<EC2N::Point>;
+CRYPTOPP_DLL_TEMPLATE_CLASS AutoSeededX917RNG<DES_EDE3>;
+CRYPTOPP_DLL_TEMPLATE_CLASS DL_PublicKey_GFP<DL_GroupParameters_DSA>;
+CRYPTOPP_DLL_TEMPLATE_CLASS DL_PrivateKey_GFP<DL_GroupParameters_DSA>;
+CRYPTOPP_DLL_TEMPLATE_CLASS 
DL_PrivateKey_WithSignaturePairwiseConsistencyTest<DL_PrivateKey_GFP<DL_GroupParameters_DSA>,
 
DSA>;
+CRYPTOPP_DLL_TEMPLATE_CLASS SimpleKeyedTransformation<BlockTransformation>;
+CRYPTOPP_DLL_TEMPLATE_CLASS SimpleKeyedTransformation<StreamTransformation>;
+CRYPTOPP_DLL_TEMPLATE_CLASS SimpleKeyedTransformation<HashTransformation>;
+#endif
+
 template<> const byte PKCS_DigestDecoration<SHA1>::decoration[] = 
{0x30,0x21,0x30,0x09,0x06,0x05,0x2B,0x0E,0x03,0x02,0x1A,0x05,0x00,0x04,0x14};
 template<> const unsigned int PKCS_DigestDecoration<SHA1>::length = 
sizeof(PKCS_DigestDecoration<SHA1>::decoration);
 
diff -ru cryptopp/dlltest.cpp cryptopp.fixed/dlltest.cpp
--- cryptopp/dlltest.cpp        2005-07-12 06:23:31.000000000 +0200
+++ cryptopp.fixed/dlltest.cpp  2005-07-23 14:15:39.000000000 +0200
@@ -195,11 +195,13 @@
 
 #else
 
+#if 0
 extern "C" __declspec(dllexport) void __cdecl GetNewAndDeleteForCryptoPP(PNew 
&pNew, PDelete &pDelete)
 {
        pNew = &operator new;
        pDelete = &operator delete;
 }
+#endif
 
 #endif
 
diff -ru cryptopp/ec2n.h cryptopp.fixed/ec2n.h
--- cryptopp/ec2n.h     2005-07-12 06:23:30.000000000 +0200
+++ cryptopp.fixed/ec2n.h       2005-07-23 14:15:39.000000000 +0200
@@ -24,7 +24,9 @@
        PolynomialMod2 x, y;
 };
 
+#ifndef SKIP_EXPLICIT_INSTANTIATION
 CRYPTOPP_DLL_TEMPLATE_CLASS AbstractGroup<EC2NPoint>;
+#endif // SKIP_EXPLICIT_INSTANTIATION
 
 //! Elliptic Curve over GF(2^n)
 class CRYPTOPP_DLL EC2N : public AbstractGroup<EC2NPoint>
@@ -84,8 +86,10 @@
        mutable Point m_R;
 };
 
+#ifndef SKIP_EXPLICIT_INSTANTIATION
 CRYPTOPP_DLL_TEMPLATE_CLASS DL_FixedBasePrecomputationImpl<EC2N::Point>;
 CRYPTOPP_DLL_TEMPLATE_CLASS DL_GroupPrecomputation<EC2N::Point>;
+#endif
 
 template <class T> class EcPrecomputation;
 
diff -ru cryptopp/eccrypto.h cryptopp.fixed/eccrypto.h
--- cryptopp/eccrypto.h 2005-07-12 06:23:30.000000000 +0200
+++ cryptopp.fixed/eccrypto.h   2005-07-23 14:15:39.000000000 +0200
@@ -137,10 +137,12 @@
        mutable Integer m_k;            // cofactor
 };
 
+#ifndef SKIP_EXPLICIT_INSTANTIATION
 CRYPTOPP_DLL_TEMPLATE_CLASS DL_GroupParameters_EC<ECP>;
 CRYPTOPP_DLL_TEMPLATE_CLASS DL_GroupParameters_EC<EC2N>;
 CRYPTOPP_DLL_TEMPLATE_CLASS DL_PublicKeyImpl<DL_GroupParameters_EC<ECP> >;
 CRYPTOPP_DLL_TEMPLATE_CLASS DL_PublicKeyImpl<DL_GroupParameters_EC<EC2N> >;
+#endif // SKIP_EXPLICIT_INSTANTIATION
 
 //! EC public key
 template <class EC>
@@ -159,10 +161,12 @@
        void DEREncodeKey(BufferedTransformation &bt) const;
 };
 
+#ifndef SKIP_EXPLICIT_INSTANTIATION
 CRYPTOPP_DLL_TEMPLATE_CLASS DL_PublicKey_EC<ECP>;
 CRYPTOPP_DLL_TEMPLATE_CLASS DL_PublicKey_EC<EC2N>;
 CRYPTOPP_DLL_TEMPLATE_CLASS DL_PrivateKeyImpl<DL_GroupParameters_EC<ECP> >;
 CRYPTOPP_DLL_TEMPLATE_CLASS DL_PrivateKeyImpl<DL_GroupParameters_EC<EC2N> >;
+#endif // SKIP_EXPLICIT_INSTANTIATION
 
 //! EC private key
 template <class EC>
@@ -185,8 +189,10 @@
        void DEREncodeKey(BufferedTransformation &bt) const;
 };
 
+#ifndef SKIP_EXPLICIT_INSTANTIATION
 CRYPTOPP_DLL_TEMPLATE_CLASS DL_PrivateKey_EC<ECP>;
 CRYPTOPP_DLL_TEMPLATE_CLASS DL_PrivateKey_EC<EC2N>;
+#endif // SKIP_EXPLICIT_INSTANTIATION
 
 //! Elliptic Curve Diffie-Hellman, AKA <a 
href="http://www.weidai.com/scan-mirror/ka.html#ECDH";>ECDH</a>
 template <class EC, class COFACTOR_OPTION = CPP_TYPENAME 
DL_GroupParameters_EC<EC>::DefaultCofactorOption>
@@ -221,8 +227,10 @@
        typedef 
DL_PrivateKey_WithSignaturePairwiseConsistencyTest<DL_PrivateKey_EC<EC>, 
ECDSA<EC> > PrivateKey;
 };
 
+#ifndef SKIP_EXPLICIT_INSTANTIATION
 CRYPTOPP_DLL_TEMPLATE_CLASS DL_Algorithm_GDSA<ECP::Point>;
 CRYPTOPP_DLL_TEMPLATE_CLASS DL_Algorithm_GDSA<EC2N::Point>;
+#endif // SKIP_EXPLICIT_INSTANTIATION
 
 //! ECDSA algorithm
 template <class EC>
@@ -246,8 +254,10 @@
 {
 };
 
+#ifndef SKIP_EXPLICIT_INSTANTIATION
 CRYPTOPP_DLL_TEMPLATE_CLASS 
DL_PrivateKey_WithSignaturePairwiseConsistencyTest<DL_PrivateKey_EC<ECP>, 
ECDSA<ECP> >;
 CRYPTOPP_DLL_TEMPLATE_CLASS 
DL_PrivateKey_WithSignaturePairwiseConsistencyTest<DL_PrivateKey_EC<EC2N>, 
ECDSA<EC2N> >;
+#endif // SKIP_EXPLICIT_INSTANTIATION
 
 //! ECNR
 template <class EC, class H = SHA>
diff -ru cryptopp/ecp.h cryptopp.fixed/ecp.h
--- cryptopp/ecp.h      2005-07-12 06:23:30.000000000 +0200
+++ cryptopp.fixed/ecp.h        2005-07-23 14:15:39.000000000 +0200
@@ -24,7 +24,9 @@
        Integer x, y;
 };
 
+#ifndef SKIP_EXPLICIT_INSTANTIATION
 CRYPTOPP_DLL_TEMPLATE_CLASS AbstractGroup<ECPPoint>;
+#endif // SKIP_EXPLICIT_INSTANTIATION
 
 //! Elliptic Curve over GF(p), where p is prime
 class CRYPTOPP_DLL ECP : public AbstractGroup<ECPPoint>
@@ -88,8 +90,10 @@
        mutable Point m_R;
 };
 
+#ifndef SKIP_EXPLICIT_INSTANTIATION
 CRYPTOPP_DLL_TEMPLATE_CLASS DL_FixedBasePrecomputationImpl<ECP::Point>;
 CRYPTOPP_DLL_TEMPLATE_CLASS DL_GroupPrecomputation<ECP::Point>;
+#endif // SKIP_EXPLICIT_INSTANTIATION
 
 template <class T> class EcPrecomputation;
 
diff -ru cryptopp/gf2n.h cryptopp.fixed/gf2n.h
--- cryptopp/gf2n.h     2005-07-12 06:23:30.000000000 +0200
+++ cryptopp.fixed/gf2n.h       2005-07-23 14:15:39.000000000 +0200
@@ -269,6 +269,7 @@
 //!
 inline CryptoPP::PolynomialMod2 operator%(const CryptoPP::PolynomialMod2 &a, 
const CryptoPP::PolynomialMod2 &b) {return a.Modulo(b);}
 
+#ifndef SKIP_EXPLICIT_INSTANTIATION
 // CodeWarrior 8 workaround: put these template instantiations after 
overloaded operator declarations,
 // but before the use of QuotientRing<EuclideanDomainOf<PolynomialMod2> > for 
VC .NET 2003
 CRYPTOPP_DLL_TEMPLATE_CLASS AbstractGroup<PolynomialMod2>;
@@ -276,6 +277,7 @@
 CRYPTOPP_DLL_TEMPLATE_CLASS AbstractEuclideanDomain<PolynomialMod2>;
 CRYPTOPP_DLL_TEMPLATE_CLASS EuclideanDomainOf<PolynomialMod2>;
 CRYPTOPP_DLL_TEMPLATE_CLASS QuotientRing<EuclideanDomainOf<PolynomialMod2> >;
+#endif // SKIP_EXPLICIT_INSTANTIATION
 
 //! GF(2^n) with Polynomial Basis
 class CRYPTOPP_DLL GF2NP : public 
QuotientRing<EuclideanDomainOf<PolynomialMod2> >
diff -ru cryptopp/gfpcrypt.h cryptopp.fixed/gfpcrypt.h
--- cryptopp/gfpcrypt.h 2005-07-12 06:23:31.000000000 +0200
+++ cryptopp.fixed/gfpcrypt.h   2005-07-23 14:15:39.000000000 +0200
@@ -411,9 +411,11 @@
                MAX_PRIME_LENGTH = 1024, PRIME_LENGTH_MULTIPLE = 64};
 };
 
+#ifndef SKIP_EXPLICIT_INSTANTIATION
 CRYPTOPP_DLL_TEMPLATE_CLASS DL_PublicKey_GFP<DL_GroupParameters_DSA>;
 CRYPTOPP_DLL_TEMPLATE_CLASS DL_PrivateKey_GFP<DL_GroupParameters_DSA>;
 CRYPTOPP_DLL_TEMPLATE_CLASS 
DL_PrivateKey_WithSignaturePairwiseConsistencyTest<DL_PrivateKey_GFP<DL_GroupParameters_DSA>,
 
DSA>;
+#endif // SKIP_EXPLICIT_INSTANTIATION
 
 //! the XOR encryption method, for use with DL-based cryptosystems
 template <class MAC, bool DHAES_MODE>
diff -ru cryptopp/iterhash.h cryptopp.fixed/iterhash.h
--- cryptopp/iterhash.h 2005-07-12 06:23:31.000000000 +0200
+++ cryptopp.fixed/iterhash.h   2005-07-23 14:15:39.000000000 +0200
@@ -54,6 +54,7 @@
        T m_countLo, m_countHi;
 };
 
+#ifndef SKIP_EXPLICIT_INSTANTIATION
 #ifdef WORD64_AVAILABLE
 CRYPTOPP_DLL_TEMPLATE_CLASS IteratedHashBase<word64, HashTransformation>;
 CRYPTOPP_STATIC_TEMPLATE_CLASS IteratedHashBase<word64, 
MessageAuthenticationCode>;
@@ -61,6 +62,7 @@
 
 CRYPTOPP_DLL_TEMPLATE_CLASS IteratedHashBase<word32, HashTransformation>;
 CRYPTOPP_STATIC_TEMPLATE_CLASS IteratedHashBase<word32, 
MessageAuthenticationCode>;
+#endif // SKIP_EXPLICIT_INSTANTIATION
 
 //! _
 template <class T_HashWordType, class T_Endianness, unsigned int T_BlockSize, 
class T_Base = HashTransformation>
diff -ru cryptopp/modarith.h cryptopp.fixed/modarith.h
--- cryptopp/modarith.h 2005-01-20 05:19:35.000000000 +0100
+++ cryptopp.fixed/modarith.h   2005-07-23 14:15:39.000000000 +0200
@@ -10,9 +10,11 @@
 
 NAMESPACE_BEGIN(CryptoPP)
 
+#ifndef SKIP_EXPLICIT_INSTANTIATION
 CRYPTOPP_DLL_TEMPLATE_CLASS AbstractGroup<Integer>;
 CRYPTOPP_DLL_TEMPLATE_CLASS AbstractRing<Integer>;
 CRYPTOPP_DLL_TEMPLATE_CLASS AbstractEuclideanDomain<Integer>;
+#endif // SKIP_EXPLICIT_INSTANTIATION
 
 //! ring of congruence classes modulo n
 /*! \note this implementation represents each congruence class as the 
smallest non-negative integer in that class */
diff -ru cryptopp/modes.h cryptopp.fixed/modes.h
--- cryptopp/modes.h    2005-07-12 06:23:31.000000000 +0200
+++ cryptopp.fixed/modes.h      2005-07-23 14:15:39.000000000 +0200
@@ -318,9 +318,11 @@
                this->Resynchronize(iv);
 }
 
+#ifndef SKIP_EXPLICIT_INSTANTIATION
 CRYPTOPP_DLL_TEMPLATE_CLASS 
CFB_CipherTemplate<AbstractPolicyHolder<CFB_CipherAbstractPolicy, 
CFB_ModePolicy> >;
 CRYPTOPP_DLL_TEMPLATE_CLASS 
CFB_EncryptionTemplate<AbstractPolicyHolder<CFB_CipherAbstractPolicy, 
CFB_ModePolicy> >;
 CRYPTOPP_DLL_TEMPLATE_CLASS 
CFB_DecryptionTemplate<AbstractPolicyHolder<CFB_CipherAbstractPolicy, 
CFB_ModePolicy> >;
+#endif // SKIP_EXPLICIT_INSTANTIATION
 
 //! CFB mode
 template <class CIPHER>
@@ -352,7 +354,9 @@
        typedef 
CipherModeFinalTemplate_ExternalCipher<ConcretePolicyHolder<Empty, 
CFB_RequireFullDataBlocks<CFB_DecryptionTemplate<AbstractPolicyHolder<CFB_CipherAbstractPolicy,
 
CFB_ModePolicy> > > > > Decryption;
 };
 
+#ifndef SKIP_EXPLICIT_INSTANTIATION
 CRYPTOPP_DLL_TEMPLATE_CLASS 
AdditiveCipherTemplate<AbstractPolicyHolder<AdditiveCipherAbstractPolicy, 
OFB_ModePolicy> >;
+#endif // SKIP_EXPLICIT_INSTANTIATION
 
 //! OFB mode
 template <class CIPHER>
@@ -369,7 +373,9 @@
        typedef Encryption Decryption;
 };
 
+#ifndef SKIP_EXPLICIT_INSTANTIATION
 CRYPTOPP_DLL_TEMPLATE_CLASS 
AdditiveCipherTemplate<AbstractPolicyHolder<AdditiveCipherAbstractPolicy, 
CTR_ModePolicy> >;
+#endif // SKIP_EXPLICIT_INSTANTIATION
 
 //! CTR mode
 template <class CIPHER>
@@ -394,7 +400,9 @@
        typedef CipherModeFinalTemplate_CipherHolder<CPP_TYPENAME 
CIPHER::Decryption, ECB_OneWay> Decryption;
 };
 
+#ifndef SKIP_EXPLICIT_INSTANTIATION
 CRYPTOPP_DLL_TEMPLATE_CLASS 
CipherModeFinalTemplate_ExternalCipher<ECB_OneWay>;
+#endif // SKIP_EXPLICIT_INSTANTIATION
 
 //! ECB mode, external cipher
 struct ECB_Mode_ExternalCipher : public CipherModeDocumentation
@@ -411,8 +419,10 @@
        typedef CipherModeFinalTemplate_CipherHolder<CPP_TYPENAME 
CIPHER::Decryption, CBC_Decryption> Decryption;
 };
 
+#ifndef SKIP_EXPLICIT_INSTANTIATION
 CRYPTOPP_DLL_TEMPLATE_CLASS 
CipherModeFinalTemplate_ExternalCipher<CBC_Encryption>;
 CRYPTOPP_DLL_TEMPLATE_CLASS 
CipherModeFinalTemplate_ExternalCipher<CBC_Decryption>;
+#endif // SKIP_EXPLICIT_INSTANTIATION
 
 //! CBC mode, external cipher
 struct CBC_Mode_ExternalCipher : public CipherModeDocumentation
@@ -429,8 +439,10 @@
        typedef CipherModeFinalTemplate_CipherHolder<CPP_TYPENAME 
CIPHER::Decryption, CBC_CTS_Decryption> Decryption;
 };
 
+#ifndef SKIP_EXPLICIT_INSTANTIATION
 CRYPTOPP_DLL_TEMPLATE_CLASS 
CipherModeFinalTemplate_ExternalCipher<CBC_CTS_Encryption>;
 CRYPTOPP_DLL_TEMPLATE_CLASS 
CipherModeFinalTemplate_ExternalCipher<CBC_CTS_Decryption>;
+#endif // SKIP_EXPLICIT_INSTANTIATION
 
 //! CBC mode with ciphertext stealing, external cipher
 struct CBC_CTS_Mode_ExternalCipher : public CipherModeDocumentation
diff -ru cryptopp/modexppc.h cryptopp.fixed/modexppc.h
--- cryptopp/modexppc.h 2003-07-04 02:17:36.000000000 +0200
+++ cryptopp.fixed/modexppc.h   2005-07-23 14:15:39.000000000 +0200
@@ -8,7 +8,9 @@
 
 NAMESPACE_BEGIN(CryptoPP)
 
+#ifndef SKIP_EXPLICIT_INSTANTIATION
 CRYPTOPP_DLL_TEMPLATE_CLASS DL_FixedBasePrecomputationImpl<Integer>;
+#endif // SKIP_EXPLICIT_INSTANTIATION
 
 class ModExpPrecomputation : public DL_GroupPrecomputation<Integer>
 {
diff -ru cryptopp/osrng.h cryptopp.fixed/osrng.h
--- cryptopp/osrng.h    2005-07-12 06:23:31.000000000 +0200
+++ cryptopp.fixed/osrng.h      2005-07-23 14:15:39.000000000 +0200
@@ -112,7 +112,9 @@
        unsigned int m_counter;
 };
 
+#ifndef SKIP_EXPLICIT_INSTANTIATION
 CRYPTOPP_DLL_TEMPLATE_CLASS AutoSeededX917RNG<DES_EDE3>;
+#endif // SKIP_EXPLICIT_INSTANTIATION
 
 template <class BLOCK_CIPHER>
 void AutoSeededX917RNG<BLOCK_CIPHER>::Reseed(const byte *key, size_t 
keylength, const byte *seed, const byte *timeVector)
diff -ru cryptopp/strciphr.h cryptopp.fixed/strciphr.h
--- cryptopp/strciphr.h 2005-07-12 06:23:31.000000000 +0200
+++ cryptopp.fixed/strciphr.h   2005-07-23 14:15:39.000000000 +0200
@@ -146,9 +146,11 @@
        size_t m_leftOver;
 };
 
+#ifndef SKIP_EXPLICIT_INSTANTIATION
 CRYPTOPP_DLL_TEMPLATE_CLASS TwoBases<SymmetricCipher, RandomNumberGenerator>;
 CRYPTOPP_DLL_TEMPLATE_CLASS 
AbstractPolicyHolder<AdditiveCipherAbstractPolicy, TwoBases<SymmetricCipher, 
RandomNumberGenerator> >;
 CRYPTOPP_DLL_TEMPLATE_CLASS AdditiveCipherTemplate<>;
+#endif // SKIP_EXPLICIT_INSTANTIATION
 
 class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE CFB_CipherAbstractPolicy
 {
@@ -263,10 +265,12 @@
        unsigned int MandatoryBlockSize() const {return 
this->OptimalBlockSize();}
 };
 
+#ifndef SKIP_EXPLICIT_INSTANTIATION
 // for Darwin
 CRYPTOPP_DLL_TEMPLATE_CLASS 
CFB_CipherTemplate<AbstractPolicyHolder<CFB_CipherAbstractPolicy, 
SymmetricCipher> >;
 CRYPTOPP_DLL_TEMPLATE_CLASS CFB_EncryptionTemplate<>;
 CRYPTOPP_DLL_TEMPLATE_CLASS CFB_DecryptionTemplate<>;
+#endif
 
 //! _
 template <class BASE, class INFO = BASE>

-- 
IBL Software Engineering, http://www.iblsoft.com  
Mierova 103, 82105 Bratislava, Slovakia
Tel: +421-2-43427227, fax: +421-2-43427214

Reply via email to