title: How to use static linking with OpenSSL in C/C++
body: <p>I wrote simple apps with Openssl in C and C++. I compile them like this:</p>
  
  <pre><code>gcc openssltest.c -o openssltest -lcrypto
  g++ openssltest.cpp -o openssltest -lcrypto
  </code></pre>
  
  <p>And its all ok but only, when you have Openssl installed.</p>
  
  <p>I would like to compile it that I can run them on OS where theres no Openssl installend (linux-like OS). I tried this:</p>
  
  <pre><code>gcc -c openssltest.c -lcrypto -static
  gcc openssltest.o -o openssltest -lcrypto -static
  </code></pre>
  
  <p>and same for C++:</p>
  
  <pre><code>g++ -c openssltest.cpp -lcrypto -static
  g++ openssltest.o -o openssltest -lcrypto -static
  </code></pre>
  
  <p>But have those errors:</p>
  
  <pre><code>/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../x86_64-linux-gnu/libcrypto.a(dso_dlfcn.o): In function `dlfcn_globallookup':
  (.text+0x19): undefined reference to `dlopen'
  /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../x86_64-linux-gnu/libcrypto.a(dso_dlfcn.o): In function `dlfcn_globallookup':
  (.text+0x2c): undefined reference to `dlsym'
  /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../x86_64-linux-gnu/libcrypto.a(dso_dlfcn.o): In function `dlfcn_globallookup':
  (.text+0x37): undefined reference to `dlclose'
  /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../x86_64-linux-gnu/libcrypto.a(dso_dlfcn.o): In function `dlfcn_bind_func':
  (.text+0x354): undefined reference to `dlsym'
  /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../x86_64-linux-gnu/libcrypto.a(dso_dlfcn.o): In function `dlfcn_bind_func':
  (.text+0x3fb): undefined reference to `dlerror'
  /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../x86_64-linux-gnu/libcrypto.a(dso_dlfcn.o): In function `dlfcn_bind_var':
  (.text+0x474): undefined reference to `dlsym'
  /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../x86_64-linux-gnu/libcrypto.a(dso_dlfcn.o): In function `dlfcn_bind_var':
  (.text+0x52e): undefined reference to `dlerror'
  /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../x86_64-linux-gnu/libcrypto.a(dso_dlfcn.o): In function `dlfcn_load':
  (.text+0x5a2): undefined reference to `dlopen'
  /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../x86_64-linux-gnu/libcrypto.a(dso_dlfcn.o): In function `dlfcn_load':
  (.text+0x60b): undefined reference to `dlclose'
  /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../x86_64-linux-gnu/libcrypto.a(dso_dlfcn.o): In function `dlfcn_load':
  (.text+0x638): undefined reference to `dlerror'
  /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../x86_64-linux-gnu/libcrypto.a(dso_dlfcn.o): In function `dlfcn_pathbyaddr':
  (.text+0x6cd): undefined reference to `dladdr'
  /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../x86_64-linux-gnu/libcrypto.a(dso_dlfcn.o): In function `dlfcn_pathbyaddr':
  (.text+0x731): undefined reference to `dlerror'
  /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../x86_64-linux-gnu/libcrypto.a(dso_dlfcn.o): In function `dlfcn_unload':
  (.text+0x78a): undefined reference to `dlclose'
  /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../x86_64-linux-gnu/libcrypto.a(c_zlib.o): In function `bio_zlib_free':
  (.text+0x4d): undefined reference to `inflateEnd'
  /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../x86_64-linux-gnu/libcrypto.a(c_zlib.o): In function `bio_zlib_free':
  (.text+0x6b): undefined reference to `deflateEnd'
  /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../x86_64-linux-gnu/libcrypto.a(c_zlib.o): In function `bio_zlib_ctrl':
  (.text+0x284): undefined reference to `deflate'
  /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../x86_64-linux-gnu/libcrypto.a(c_zlib.o): In function `bio_zlib_ctrl':
  (.text+0x342): undefined reference to `zError'
  /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../x86_64-linux-gnu/libcrypto.a(c_zlib.o): In function `zlib_stateful_expand_block':
  (.text+0x411): undefined reference to `inflate'
  /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../x86_64-linux-gnu/libcrypto.a(c_zlib.o): In function `zlib_stateful_compress_block':
  (.text+0x4ca): undefined reference to `deflate'
  /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../x86_64-linux-gnu/libcrypto.a(c_zlib.o): In function `zlib_stateful_finish':
  (.text+0x51f): undefined reference to `inflateEnd'
  /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../x86_64-linux-gnu/libcrypto.a(c_zlib.o): In function `zlib_stateful_finish':
  (.text+0x528): undefined reference to `deflateEnd'
  /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../x86_64-linux-gnu/libcrypto.a(c_zlib.o): In function `zlib_stateful_init':
  (.text+0x5d7): undefined reference to `inflateInit_'
  /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../x86_64-linux-gnu/libcrypto.a(c_zlib.o): In function `zlib_stateful_init':
  (.text+0x659): undefined reference to `deflateInit_'
  /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../x86_64-linux-gnu/libcrypto.a(c_zlib.o): In function `bio_zlib_read':
  (.text+0x893): undefined reference to `inflate'
  /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../x86_64-linux-gnu/libcrypto.a(c_zlib.o): In function `bio_zlib_read':
  (.text+0x90d): undefined reference to `zError'
  /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../x86_64-linux-gnu/libcrypto.a(c_zlib.o): In function `bio_zlib_read':
  (.text+0x97c): undefined reference to `inflateInit_'
  /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../x86_64-linux-gnu/libcrypto.a(c_zlib.o): In function `bio_zlib_write':
  (.text+0xa6f): undefined reference to `deflate'
  /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../x86_64-linux-gnu/libcrypto.a(c_zlib.o): In function `bio_zlib_write':
  (.text+0xaec): undefined reference to `zError'
  /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../x86_64-linux-gnu/libcrypto.a(c_zlib.o): In function `bio_zlib_write':
  (.text+0xb7e): undefined reference to `deflateInit_'
  collect2: error: ld returned 1 exit status
  </code></pre>
  
  <p>How can I make this? I remember that a while ago I did this but now, erm, forgot how to do it. Im on Ubuntu 13.04 <strong>x64</strong> - can it be an issue?</p>