Poster une réponse à un sujet: [C++] Impossible d'utiliser ni compiler la lib Crypto++ !
Attention, ce sujet est un sujet ancien (6731 jours sans réponse)
ovh
Je précise aussi que, pour me prouver à moi-même que je ne commets pas d'erreur de manip de Visual C++, j'ai testé l'intégration d'une autre lib tierce, à savoir Irrlicht (moteur 3D). J'ai réussi à compiler et exécuter une application exemple sans le moindre problème et à la manière du cas d'école : ajout des répertoire include/lib, compilation, exécution...
Bref, c'est vraiment Crypto++ qui est récalcitrant
Toute aide sera grandement appréciée
Bref, c'est vraiment Crypto++ qui est récalcitrant
Toute aide sera grandement appréciée
ovh
Bon je me réattelle à ce vieux projet, cette fois en utilisant Visual C++ Express 2005, IDE totalement gratuit Malheureusement... ça foire complètement, pour pas changer
Je me disais pourtant que là je suis en environnement classique ultra-courant pour programmer sous windows, et donc il me suffira d'indiquer le rep des include et de cryptopp.lib (et sa dll) pour que ça marche... Hé bien non
Mes tests :
- mon petit prog "hashtest" (présenté plus haut), plante à l'exécution, Crypto++ envoit une exception "selftest failure"
- alors j'essaie de compiler la lib en me disant que c'est peut-être un prob de version de compilo (ce qui déjà est pénible en soi, car à quoi ça sert de fournir un fichier lib précompilé si ça ne marche qu'avec la version précise qu'a utilisé le développeur... ) : ça foire aussi, il me sort des erreurs très sympatiques du genre :
Supaire
- j'essaie avec une autre version plus ancienne (5.2.1), même genre d'erreurs...
Bref j'en ai ma claque, marre de marre !
J'admets que je suis loin d'être un expert de Visual C++ puisque c'est la première fois que je l'utilise, mais bon quand même... Normalement pour compiler des sources, on indique le rep des include et des lib dans l'IDE et ça doit marcher.
Qu'est-ce que je fais de mal ?
Merci pour toute aide
Je me disais pourtant que là je suis en environnement classique ultra-courant pour programmer sous windows, et donc il me suffira d'indiquer le rep des include et de cryptopp.lib (et sa dll) pour que ça marche... Hé bien non
Mes tests :
- mon petit prog "hashtest" (présenté plus haut), plante à l'exécution, Crypto++ envoit une exception "selftest failure"
- alors j'essaie de compiler la lib en me disant que c'est peut-être un prob de version de compilo (ce qui déjà est pénible en soi, car à quoi ça sert de fournir un fichier lib précompilé si ça ne marche qu'avec la version précise qu'a utilisé le développeur... ) : ça foire aussi, il me sort des erreurs très sympatiques du genre :
'bool CryptoPP::OIDLessThan::operator ()<CryptoPP::ECP>(const CryptoPP::OID &,const CryptoPP::EcRecommendedParameters<CryptoPP::ECP> &)' : cannot convert parameter 1 from 'const CryptoPP::EcRecommendedParameters<CryptoPP::ECP>' to 'const CryptoPP::OID &'
Reason: cannot convert from 'const CryptoPP::EcRecommendedParameters<CryptoPP::ECP>' to 'const CryptoPP::OID'
No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
Reason: cannot convert from 'const CryptoPP::EcRecommendedParameters<CryptoPP::ECP>' to 'const CryptoPP::OID'
No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
Supaire
- j'essaie avec une autre version plus ancienne (5.2.1), même genre d'erreurs...
Bref j'en ai ma claque, marre de marre !
J'admets que je suis loin d'être un expert de Visual C++ puisque c'est la première fois que je l'utilise, mais bon quand même... Normalement pour compiler des sources, on indique le rep des include et des lib dans l'IDE et ça doit marcher.
Qu'est-ce que je fais de mal ?
Merci pour toute aide
ArKeL
Je sais pas si ça peut t'aider.
Mais avec les utilitaires MinGW, il y a un petit outil qui permet de transformer les .lib Visual Studio en .a pour Dev-C++, c'est reimp.
Il suffit de le coller dans le répertoire des libs à transformer et de faire :
reimp <nom> (sans l'extension, .lib dans notre cas)
http://prdownloads.sf.net/mingw/mingw-utils-0.2.tar.gz?download
Mais avec les utilitaires MinGW, il y a un petit outil qui permet de transformer les .lib Visual Studio en .a pour Dev-C++, c'est reimp.
Il suffit de le coller dans le répertoire des libs à transformer et de faire :
reimp <nom> (sans l'extension, .lib dans notre cas)
http://prdownloads.sf.net/mingw/mingw-utils-0.2.tar.gz?download
ovh
rfr je ne sais pour quelle raison, j'avais peut-être bidouillé ton Makefile, mais bref j'ai refait le test et ça marche, lib et exe compris. Cependant ça ne résoud pas mon problème (puisque moi je parvenais aussi à sortir le libcryptopp.a)
Voici un petit code fait rapidement pour tester la lib :
/*
Prog de test pour la lib Crypto++
Compile: g++ -o hashtest hashtest.cpp -lcrypto++
Site pour tester: http://serversniff.net/content.php?do=hash
*/
#include <iostream>
#include <string>
// à remplacer par <cryptopp/...> sous windows
#include <crypto++/cryptlib.h>
#include <crypto++/sha.h>
using namespace std;
using namespace CryptoPP;
int main() {
string plaintext;
byte sig[ SHA512::DIGESTSIZE ];
cout<<"Chaîne de caractères à hasher: ";
getline(cin, plaintext); // pour saisir des chaînes avec espaces
// appel à la lib Crypto++ pour calculer le hash
SHA512 hash;
hash.CalculateDigest(sig, (byte const *)plaintext.c_str(), plaintext.size());
cout<<"Hash ("<<SHA512::DIGESTSIZE<<" bytes) = ";
for (int i=0; i<SHA512::DIGESTSIZE; i++) cout<<hex<<uppercase<<(int)sig[ i ]<<" ";
cout<<dec<<nouppercase<<endl;
}
Ca marche nickel sous linux
Et sous Windows voici le résultat de la compil :
Help
Voici un petit code fait rapidement pour tester la lib :
/*
Prog de test pour la lib Crypto++
Compile: g++ -o hashtest hashtest.cpp -lcrypto++
Site pour tester: http://serversniff.net/content.php?do=hash
*/
#include <iostream>
#include <string>
// à remplacer par <cryptopp/...> sous windows
#include <crypto++/cryptlib.h>
#include <crypto++/sha.h>
using namespace std;
using namespace CryptoPP;
int main() {
string plaintext;
byte sig[ SHA512::DIGESTSIZE ];
cout<<"Chaîne de caractères à hasher: ";
getline(cin, plaintext); // pour saisir des chaînes avec espaces
// appel à la lib Crypto++ pour calculer le hash
SHA512 hash;
hash.CalculateDigest(sig, (byte const *)plaintext.c_str(), plaintext.size());
cout<<"Hash ("<<SHA512::DIGESTSIZE<<" bytes) = ";
for (int i=0; i<SHA512::DIGESTSIZE; i++) cout<<hex<<uppercase<<(int)sig[ i ]<<" ";
cout<<dec<<nouppercase<<endl;
}
Ca marche nickel sous linux
Et sous Windows voici le résultat de la compil :
F:\Olivier\projects\win32progs>g++ -o hashtest.exe hashtest.cpp -lcryptopp
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccGEbaaa.o:hashtest.cpp:(.rdata$_ZTVN8CryptoP
P6SHA512E[vtable for CryptoPP::SHA512]+0x44): undefined reference to `CryptoPP::
IteratedHashBase<unsigned long long, CryptoPP::HashTransformation>::TruncatedFin
al(unsigned char*, unsigned int)'
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccGEbaaa.o:hashtest.cpp:(.rdata$_ZTVN8CryptoP
P31IteratedHashWithStaticTransformIyNS_10EnumToTypeINS_9ByteOrderELi1EEELj128ELj
64ENS_6SHA512ELj64EEE[vtable for CryptoPP::IteratedHashWithStaticTransform<unsig
ned long long, CryptoPP::EnumToType<CryptoPP::ByteOrder, 1>, 128u, 64u, CryptoPP
::SHA512, 64u>]+0x44): undefined reference to `CryptoPP::IteratedHashBase<unsign
ed long long, CryptoPP::HashTransformation>::TruncatedFinal(unsigned char*, unsi
gned int)'
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccGEbaaa.o:hashtest.cpp:(.rdata$_ZTVN8CryptoP
P12ClonableImplINS_6SHA512ENS_13AlgorithmImplINS_12IteratedHashIyNS_10EnumToType
INS_9ByteOrderELi1EEELj128ENS_18HashTransformationEEES1_EEEE[vtable for CryptoPP
::ClonableImpl<CryptoPP::SHA512, CryptoPP::AlgorithmImpl<CryptoPP::IteratedHash<
unsigned long long, CryptoPP::EnumToType<CryptoPP::ByteOrder, 1>, 128u, CryptoPP
::HashTransformation>, CryptoPP::SHA512> >]+0x44): undefined reference to `Crypt
oPP::IteratedHashBase<unsigned long long, CryptoPP::HashTransformation>::Truncat
edFinal(unsigned char*, unsigned int)'
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccGEbaaa.o:hashtest.cpp:(.rdata$_ZTVN8CryptoP
P13AlgorithmImplINS_12IteratedHashIyNS_10EnumToTypeINS_9ByteOrderELi1EEELj128ENS
_18HashTransformationEEENS_6SHA512EEE[vtable for CryptoPP::AlgorithmImpl<CryptoP
P::IteratedHash<unsigned long long, CryptoPP::EnumToType<CryptoPP::ByteOrder, 1>
, 128u, CryptoPP::HashTransformation>, CryptoPP::SHA512>]+0x44): undefined refer
ence to `CryptoPP::IteratedHashBase<unsigned long long, CryptoPP::HashTransforma
tion>::TruncatedFinal(unsigned char*, unsigned int)'
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccGEbaaa.o:hashtest.cpp:(.rdata$_ZTVN8CryptoP
P12IteratedHashIyNS_10EnumToTypeINS_9ByteOrderELi1EEELj128ENS_18HashTransformati
onEEE[vtable for CryptoPP::IteratedHash<unsigned long long, CryptoPP::EnumToType
<CryptoPP::ByteOrder, 1>, 128u, CryptoPP::HashTransformation>]+0x44): undefined
reference to `CryptoPP::IteratedHashBase<unsigned long long, CryptoPP::HashTrans
formation>::TruncatedFinal(unsigned char*, unsigned int)'
collect2: ld returned 1 exit status
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccGEbaaa.o:hashtest.cpp:(.rdata$_ZTVN8CryptoP
P6SHA512E[vtable for CryptoPP::SHA512]+0x44): undefined reference to `CryptoPP::
IteratedHashBase<unsigned long long, CryptoPP::HashTransformation>::TruncatedFin
al(unsigned char*, unsigned int)'
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccGEbaaa.o:hashtest.cpp:(.rdata$_ZTVN8CryptoP
P31IteratedHashWithStaticTransformIyNS_10EnumToTypeINS_9ByteOrderELi1EEELj128ELj
64ENS_6SHA512ELj64EEE[vtable for CryptoPP::IteratedHashWithStaticTransform<unsig
ned long long, CryptoPP::EnumToType<CryptoPP::ByteOrder, 1>, 128u, 64u, CryptoPP
::SHA512, 64u>]+0x44): undefined reference to `CryptoPP::IteratedHashBase<unsign
ed long long, CryptoPP::HashTransformation>::TruncatedFinal(unsigned char*, unsi
gned int)'
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccGEbaaa.o:hashtest.cpp:(.rdata$_ZTVN8CryptoP
P12ClonableImplINS_6SHA512ENS_13AlgorithmImplINS_12IteratedHashIyNS_10EnumToType
INS_9ByteOrderELi1EEELj128ENS_18HashTransformationEEES1_EEEE[vtable for CryptoPP
::ClonableImpl<CryptoPP::SHA512, CryptoPP::AlgorithmImpl<CryptoPP::IteratedHash<
unsigned long long, CryptoPP::EnumToType<CryptoPP::ByteOrder, 1>, 128u, CryptoPP
::HashTransformation>, CryptoPP::SHA512> >]+0x44): undefined reference to `Crypt
oPP::IteratedHashBase<unsigned long long, CryptoPP::HashTransformation>::Truncat
edFinal(unsigned char*, unsigned int)'
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccGEbaaa.o:hashtest.cpp:(.rdata$_ZTVN8CryptoP
P13AlgorithmImplINS_12IteratedHashIyNS_10EnumToTypeINS_9ByteOrderELi1EEELj128ENS
_18HashTransformationEEENS_6SHA512EEE[vtable for CryptoPP::AlgorithmImpl<CryptoP
P::IteratedHash<unsigned long long, CryptoPP::EnumToType<CryptoPP::ByteOrder, 1>
, 128u, CryptoPP::HashTransformation>, CryptoPP::SHA512>]+0x44): undefined refer
ence to `CryptoPP::IteratedHashBase<unsigned long long, CryptoPP::HashTransforma
tion>::TruncatedFinal(unsigned char*, unsigned int)'
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccGEbaaa.o:hashtest.cpp:(.rdata$_ZTVN8CryptoP
P12IteratedHashIyNS_10EnumToTypeINS_9ByteOrderELi1EEELj128ENS_18HashTransformati
onEEE[vtable for CryptoPP::IteratedHash<unsigned long long, CryptoPP::EnumToType
<CryptoPP::ByteOrder, 1>, 128u, CryptoPP::HashTransformation>]+0x44): undefined
reference to `CryptoPP::IteratedHashBase<unsigned long long, CryptoPP::HashTrans
formation>::TruncatedFinal(unsigned char*, unsigned int)'
collect2: ld returned 1 exit status
Help
rfr
Chez moi l'exe passait bien ... strange
ovh
Bah chez moi ça produit un fichier libcryptopp.a aussi, ça ne plante qu'à la génération de l'exe de test ce qui n'est pas mortellement grave.
Par contre ce qui est grave, c'est que lorsque je veux intégrer la lib à un prog de test, ça plante au linkage : j'ai une chiée de "undefined reference to CryptoPP::XXX"
Je referai le test avec ton makefile ce soir, et je posterai une mini-source C++ pour tester l'intégration de la lib.
Par contre ce qui est grave, c'est que lorsque je veux intégrer la lib à un prog de test, ça plante au linkage : j'ai une chiée de "undefined reference to CryptoPP::XXX"
Je referai le test avec ton makefile ce soir, et je posterai une mini-source C++ pour tester l'intégration de la lib.
rfr
Chez moi ça avait bien marcher ...
ovh
Damn, je t'avais pas filer le truc pour le compiler?
Oui
Mais il me semble que ça ne fonctionnait pas non plus. Je réessaierai ce soir en reprenant le makefile de ton mail (c'est sur ma machine à la maison).
rfr
Damn, je t'avais pas filer le truc pour le compiler?
ovh
Dev-C++ >> windows
Sous linux ça marche sans problème, merci Debian (apt-get install libcrypto++-dev ).
Sous linux ça marche sans problème, merci Debian (apt-get install libcrypto++-dev ).