title: Using Crypto++ with clang
body: <p>I'm attempting to get the following Crypto++ (C++ Class Library of Cryptographic Schemes) example to work on a iMac using clang++.</p>
  
  <p>Example</p>
  
  <pre><code>SHA256 hash;
  
  byte digest[ SHA256::DIGESTSIZE ];
  
  hash.CalculateDigest( digest, (byte*) &amp;value[ 0 ], value.size( ) );
  
  HexEncoder encoder;
  
  string result = String::empty;
  
  encoder.Attach( new StringSink( result ) );
  
  encoder.Put( digest, sizeof( digest ) );
  
  encoder.MessageEnd( );
  </code></pre>
  
  <p>Build command</p>
  
  <pre><code>Apple clang version 2.1 (tags/Apple/clang-163.7.1) (based on LLVM 3.0svn)
  Target: x86_64-apple-darwin11.4.0
  Thread model: posix
   "/usr/bin/clang" -cc1 -triple x86_64-apple-macosx10.7.4 -emit-obj -mrelax-all -disable-free -disable-llvm-verifier -main-file-name checksum_impl.cpp -pic-level 2 -mdisable-fp-elim -relaxed-aliasing -masm-verbose -munwind-tables -target-cpu core2 -target-linker-version 123.2.1 -v -resource-dir /usr/bin/../lib/clang/2.1 -D framework_EXPORTS -I /Users/Ben/Dropbox/appon/build/../source -nostdinc++ -cxx-isystem /usr/include/c++/v1 -Wall -Wextra -Weffc++ -pedantic -std=c++0x -fdeprecated-macro -ferror-limit 19 -fmessage-length 175 -stack-protector 1 -fblocks -fcxx-exceptions -fexceptions -fdiagnostics-show-option -fcolor-diagnostics -o CMakeFiles/framework.dir/Users/Ben/Dropbox/source/example.cpp.o -x c++ /Users/Ben/Dropbox/source/example.cpp
  clang -cc1 version 2.1 based upon llvm 3.0svn hosted on x86_64-apple-darwin11.4.0
  #include "..." search starts here:
  #include &lt;...&gt; search starts here:
   /Users/Ben/Dropbox/build/../source
   /usr/include/c++/v1
   /usr/local/include
   /usr/bin/../lib/clang/2.1/include
   /usr/include
   /System/Library/Frameworks (framework directory)
   /Library/Frameworks (framework directory)
  End of search list.
  </code></pre>
  
  <p>Linker output</p>
  
  <pre><code>clang: warning: argument unused during compilation: '-std=c++0x'
  Undefined symbols for architecture x86_64:
    "CryptoPP::Filter::TransferTo2(CryptoPP::BufferedTransformation&amp;, unsigned long long&amp;, std::__1::basic_string&lt;char, std::__1::char_traits&lt;char&gt;, std::__1::allocator&lt;char&gt; &gt; const&amp;, bool)", referenced from:
        vtable for CryptoPP::SimpleProxyFilter in checksum_impl.cpp.o
        vtable for CryptoPP::Bufferless&lt;CryptoPP::Filter&gt; in checksum_impl.cpp.o
        vtable for CryptoPP::Unflushable&lt;CryptoPP::Filter&gt; in checksum_impl.cpp.o
    "CryptoPP::Filter::CopyRangeTo2(CryptoPP::BufferedTransformation&amp;, unsigned long long&amp;, unsigned long long, std::__1::basic_string&lt;char, std::__1::char_traits&lt;char&gt;, std::__1::allocator&lt;char&gt; &gt; const&amp;, bool) const", referenced from:
        vtable for CryptoPP::SimpleProxyFilter in checksum_impl.cpp.o
        vtable for CryptoPP::Bufferless&lt;CryptoPP::Filter&gt; in checksum_impl.cpp.o
        vtable for CryptoPP::Unflushable&lt;CryptoPP::Filter&gt; in checksum_impl.cpp.o
    "CryptoPP::BufferedTransformation::ChannelCreatePutSpace(std::__1::basic_string&lt;char, std::__1::char_traits&lt;char&gt;, std::__1::allocator&lt;char&gt; &gt; const&amp;, unsigned long&amp;)", referenced from:
        vtable for CryptoPP::SimpleProxyFilter in checksum_impl.cpp.o
        vtable for CryptoPP::Bufferless&lt;CryptoPP::Filter&gt; in checksum_impl.cpp.o
        vtable for CryptoPP::Unflushable&lt;CryptoPP::Filter&gt; in checksum_impl.cpp.o
    "CryptoPP::BufferedTransformation::ChannelPut2(std::__1::basic_string&lt;char, std::__1::char_traits&lt;char&gt;, std::__1::allocator&lt;char&gt; &gt; const&amp;, unsigned char const*, unsigned long, int, bool)", referenced from:
        vtable for CryptoPP::SimpleProxyFilter in checksum_impl.cpp.o
        vtable for CryptoPP::Bufferless&lt;CryptoPP::Filter&gt; in checksum_impl.cpp.o
        vtable for CryptoPP::Unflushable&lt;CryptoPP::Filter&gt; in checksum_impl.cpp.o
    "CryptoPP::BufferedTransformation::ChannelPutModifiable2(std::__1::basic_string&lt;char, std::__1::char_traits&lt;char&gt;, std::__1::allocator&lt;char&gt; &gt; const&amp;, unsigned char*, unsigned long, int, bool)", referenced from:
        vtable for CryptoPP::SimpleProxyFilter in checksum_impl.cpp.o
        vtable for CryptoPP::Bufferless&lt;CryptoPP::Filter&gt; in checksum_impl.cpp.o
        vtable for CryptoPP::Unflushable&lt;CryptoPP::Filter&gt; in checksum_impl.cpp.o
    "CryptoPP::BufferedTransformation::ChannelFlush(std::__1::basic_string&lt;char, std::__1::char_traits&lt;char&gt;, std::__1::allocator&lt;char&gt; &gt; const&amp;, bool, int, bool)", referenced from:
        vtable for CryptoPP::SimpleProxyFilter in checksum_impl.cpp.o
        vtable for CryptoPP::Bufferless&lt;CryptoPP::Filter&gt; in checksum_impl.cpp.o
    "CryptoPP::BufferedTransformation::ChannelMessageSeriesEnd(std::__1::basic_string&lt;char, std::__1::char_traits&lt;char&gt;, std::__1::allocator&lt;char&gt; &gt; const&amp;, int, bool)", referenced from:
        vtable for CryptoPP::SimpleProxyFilter in checksum_impl.cpp.o
        vtable for CryptoPP::Bufferless&lt;CryptoPP::Filter&gt; in checksum_impl.cpp.o
        vtable for CryptoPP::Unflushable&lt;CryptoPP::Filter&gt; in checksum_impl.cpp.o
    "CryptoPP::BufferedTransformation::SetRetrievalChannel(std::__1::basic_string&lt;char, std::__1::char_traits&lt;char&gt;, std::__1::allocator&lt;char&gt; &gt; const&amp;)", referenced from:
        vtable for CryptoPP::SimpleProxyFilter in checksum_impl.cpp.o
        vtable for CryptoPP::Bufferless&lt;CryptoPP::Filter&gt; in checksum_impl.cpp.o
        vtable for CryptoPP::Unflushable&lt;CryptoPP::Filter&gt; in checksum_impl.cpp.o
  ld: symbol(s) not found for architecture x86_64
  clang: error: linker command failed with exit code 1 (use -v to see invocation)
  make: *** [all] Error 2
  </code></pre>
  
  <p>I'm using the latest development version of Crypto++ 5.6.2 as the previous version 5.6.1 fails to build with clang++. However i'm encountering build issues stating that i have missing symbols for x86_64 architecture.</p>
  
  <p>Any hints would be greatly appreciated.</p>