Adding -lpthread to the compiler options, as Roy suggested solved the
problem. Thank you very much.
I do not understand how -pthread as linker option should solve the
problem, as the parameter is unknown by g++. Did you perhaps mean
-lpthread or did I add the parameter to the wrong command? I have to
add it as linker flag, don't I?

On 5/21/08, Wei Dai <[EMAIL PROTECTED]> wrote:
> I think you need to add "-pthread" as an option to the linker.
>
> --------------------------------------------------
> From: "Jojo" <[EMAIL PROTECTED]>
> Sent: Tuesday, May 20, 2008 1:21 PM
> To: "Crypto++ Users" <[EMAIL PROTECTED]>
> Subject: Re: Compiling fails "undefined reference to `pthread_key_create'"
>
>>
>> Oops sorry.
>>
>> I am trying to compile an app which uses libcrypto++ on my debian
>> machine with gcc-4.2.
>> I googled it and some guys were facing this problem with Eclipse but I
>> am using KDevelop.
>> http://article.gmane.org/gmane.comp.encryption.cryptopp/3685
>> http://groups.google.com/group/cryptopp-users/browse_thread/thread/e88323e6093f2c68?fwc=1
>>
>>
>> This is my minimum program:
>> #include <iostream>
>> #include <cstdlib>
>>
>> //cryptopp
>> #include <md5.h>
>> #include <hex.h>
>>
>> using namespace std;
>>
>> int main(int argc, char *argv[])
>> {
>>  cout << "Hello, world!" << endl;
>> CryptoPP::MD5 hash;
>> byte digest[ CryptoPP::MD5::DIGESTSIZE ];
>> std::string message = "abcdefghijklmnopqrstuvwxyz";
>>
>> hash.Calculate#include <iostream>
>> #include <cstdlib>
>> #include <md5.h>
>> #include <hex.h>
>> using namespace std;
>>
>> int main(int argc, char *argv[])
>> {
>>  cout << "Hello, world!" << endl;
>> CryptoPP::MD5 hash;
>> byte digest[ CryptoPP::MD5::DIGESTSIZE ];
>> std::string message = "abcdefghijklmnopqrstuvwxyz";
>>
>> hash.CalculateDigest( digest, (byte*) message.c_str(),
>> message.length() );
>>
>> CryptoPP::HexEncoder encoder;
>> std::string output;
>> encoder.Attach( new CryptoPP::StringSink( output ) );
>> encoder.Put( digest, sizeof(digest) );
>> encoder.MessageEnd();
>>
>> std::cout << output << std::endl;
>>  return EXIT_SUCCESS;
>> }Digest( digest, (byte*) message.c_str(), message.length() );
>>
>> CryptoPP::HexEncoder encoder;
>> std::string output;
>> encoder.Attach( new CryptoPP::StringSink( output ) );
>> encoder.Put( digest, sizeof(digest) );
>> encoder.MessageEnd();
>>
>> std::cout << output << std::endl;
>>  return EXIT_SUCCESS;
>> }
>>
>> And this is the compiler output:
>> cd '/home/user/cryptopptest/debug' && WANT_AUTOCONF_2_5="1"
>> WANT_AUTOMAKE_1_6="1" LC_MESSAGES="C" LC_CTYPE="C" make -k
>> make all-recursive
>> Making all in src
>> cd /home/user/cryptopptest && /bin/sh /home/user/cryptopptest/missing
>> --run automake-1.10 --gnu src/Makefile
>> cd .. && /bin/sh ./config.status src/Makefile depfiles
>> config.status: creating src/Makefile
>> config.status: executing depfiles commands
>> g++ -DHAVE_CONFIG_H -I. -I/home/user/cryptopptest/src -I.. -I/usr/
>> include/cryptopp -O0 -g3 -MT cryptopptest.o -MD -MP -MF .deps/
>> cryptopptest.Tpo -c -o cryptopptest.o /home/user/cryptopptest/src/
>> cryptopptest.cpp
>> In file included from /home/user/cryptopptest/src/cryptopptest.cpp:28:
>> /usr/include/cryptopp/md5.h:25:2: warning: #warning "You may be using
>> a weak algorithm that has been retained for backwards compatibility.
>> Please '#define CRYPTOPP_ENABLE_NAMESPACE_WEAK 1' before including
>> this .h file and prepend the class name with 'Weak::' to remove this
>> warning."
>> mv -f .deps/cryptopptest.Tpo .deps/cryptopptest.Po
>> /bin/sh ../libtool --tag=CXX --mode=link g++ -O0 -g3 -o cryptopptest
>> cryptopptest.o -lcryptopp
>> g++ -O0 -g3 -o cryptopptest cryptopptest.o /usr/lib/libcrypto++.so
>> /usr/lib/libcrypto++.so: undefined reference to `pthread_key_create'
>> /usr/lib/libcrypto++.so: undefined reference to `pthread_getspecific'
>> /usr/lib/libcrypto++.so: undefined reference to `pthread_key_delete'
>> /usr/lib/libcrypto++.so: undefined reference to `pthread_setspecific'
>> collect2: ld returned 1 exit status
>> make[2]: Nothing to be done for `all-am'.
>> make[2]: *** [cryptopptest] Error 1
>> make[2]: Target `all' not remade because of errors.
>> make[1]: *** [all-recursive] Error 1
>> make: *** [all] Error 2
>> *** Exited with status: 2 ***
>>
>> >>
>
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the "Crypto++ Users" 
Google Group.
To unsubscribe, send an email to [EMAIL PROTECTED]
More information about Crypto++ and this group is available at 
http://www.cryptopp.com.
-~----------~----~----~----~------~----~------~--~---

Reply via email to