<div dir="ltr"><br>Hello,<br><br>I am trying to setup a lab to Code a program with C++ (g++ (GCC) 11.2.0) and OpenSSL (OpenSSL 1.1.1m 14 Dec 2021) and Cygwin.<br><br>Below is my basic C++ skeleton to start with ...<br><br>#ifndef __TLS_HPP__<br>#define __TLS_HPP__<br><br>#include <memory><br>#include <stdexcept><br><br>#include <openssl/bio.h><br>#include <openssl/buffer.h><br>#include <openssl/conf.h><br>#include <openssl/err.h><br>#include <openssl/opensslconf.h><br>#include <openssl/opensslv.h><br>#include <openssl/pem.h><br>#include <openssl/ssl.h><br>#include <openssl/x509.h><br>#include <openssl/x509v3.h><br><br>namespace TLS {<br><br>class Tls {<br>public:<br>    Tls();<br>    ~Tls();<br>private:<br>};<br><br>Tls::Tls()<br>{<br>#if OPENSSL_VERSION_NUMBER < 0x10100000L<br>    SSL_library_init();<br>    SSL_load_error_strings();<br>    ERR_load_crypto_strings();<br>#endif<br><br>}<br><br>}   // end-of namespace TLS<br><br>#endif<br><br>#include <chrono><br>#include <iostream><br>#include <vector><br><br>int main() {<br>    return 0;<br>}<br><br>I can successfully compile this Code with the following command ..<br><br>$ g++ -O0 -std=c++11 -x c++ -lssl -lcrypto ./tls.hpp<br><br>But none of the commands below do show any linking with OpenSSL libraries ?<br><br>$ ldd ./a.exe<br>        ntdll.dll => /cygdrive/c/WINDOWS/SYSTEM32/ntdll.dll (0x7ffd731d0000)<br>        KERNEL32.DLL => /cygdrive/c/WINDOWS/System32/KERNEL32.DLL (0x7ffd71c20000)<br>        KERNELBASE.dll => /cygdrive/c/WINDOWS/System32/KERNELBASE.dll (0x7ffd70bd0000)<br>        cygwin1.dll => /usr/bin/cygwin1.dll (0x180040000)<br>        cygstdc++-6.dll => /usr/bin/cygstdc++-6.dll (0x3fbeb0000)<br>        cyggcc_s-seh-1.dll => /usr/bin/cyggcc_s-seh-1.dll (0x3fee10000)<br><br>$ objdump -x ./a.exe | grep 'DLL'<br> vma:            Hint    Time      Forward  DLL       First<br>        DLL Name: cygwin1.dll<br>        DLL Name: cygstdc++-6.dll<br>        DLL Name: KERNEL32.dll<br><br>$ nm ./a.exe | egrep -i 'ssl|crypt'<br><br>.. finally and just to be sure, my Cygwin env is enough to proceed like this, I made a try compiling Curl ... this one do correctly show the linking with both cygcrypto-1.1.dll and cygssl-1.1.dll ..<br><br>$ ldd /usr/bin/curl<br>        ntdll.dll => /cygdrive/c/WINDOWS/SYSTEM32/ntdll.dll (0x7ffd731d0000)<br>        KERNEL32.DLL => /cygdrive/c/WINDOWS/System32/KERNEL32.DLL (0x7ffd71c20000)<br>        KERNELBASE.dll => /cygdrive/c/WINDOWS/System32/KERNELBASE.dll (0x7ffd70bd0000)<br>        cygcurl-4.dll => /usr/bin/cygcurl-4.dll (0x3ff600000)<br>        cygwin1.dll => /usr/bin/cygwin1.dll (0x180040000)<br>        cygz.dll => /usr/bin/cygz.dll (0x3fb940000)<br>        cygbrotlidec-1.dll => /usr/bin/cygbrotlidec-1.dll (0x3ffcd0000)<br>        cygcrypto-1.1.dll => /usr/bin/cygcrypto-1.1.dll (0x3ff6b0000)<br>        cyggsasl-7.dll => /usr/bin/cyggsasl-7.dll (0x3fe640000)<br>        cyggssapi_krb5-2.dll => /usr/bin/cyggssapi_krb5-2.dll (0x3fe5f0000)<br>        cygidn2-0.dll => /usr/bin/cygidn2-0.dll (0x3fe020000)<br>        cyglber-2-5-0.dll => /usr/bin/cyglber-2-5-0.dll (0x3fd7b0000)<br>        cygldap-2-5-0.dll => /usr/bin/cygldap-2-5-0.dll (0x3fd6a0000)<br>        cygnghttp2-14.dll => /usr/bin/cygnghttp2-14.dll (0x3fcdb0000)<br>        cygpsl-5.dll => /usr/bin/cygpsl-5.dll (0x3fc4e0000)<br>        cygssh2-1.dll => /usr/bin/cygssh2-1.dll (0x3fc190000)<br>        cygssl-1.1.dll => /usr/bin/cygssl-1.1.dll (0x3fc090000)<br>        cygzstd-1.dll => /usr/bin/cygzstd-1.dll (0x3fb840000)<br>        cygbrotlicommon-1.dll => /usr/bin/cygbrotlicommon-1.dll (0x3ffcf0000)<br>        cyggcrypt-20.dll => /usr/bin/cyggcrypt-20.dll (0x3fecf0000)<br>        cygidn-11.dll => /usr/bin/cygidn-11.dll (0x3fe090000)<br>        cygintl-8.dll => /usr/bin/cygintl-8.dll (0x3fdfe0000)<br>        cygntlm-0.dll => /usr/bin/cygntlm-0.dll (0x3fcd90000)<br>        cygk5crypto-3.dll => /usr/bin/cygk5crypto-3.dll (0x3fd8e0000)<br>        cygkrb5-3.dll => /usr/bin/cygkrb5-3.dll (0x3fd810000)<br>        cygkrb5support-0.dll => /usr/bin/cygkrb5support-0.dll (0x3fd7f0000)<br>        cygcom_err-2.dll => /usr/bin/cygcom_err-2.dll (0x3ffbd0000)<br>        cygiconv-2.dll => /usr/bin/cygiconv-2.dll (0x3fe0d0000)<br>        cygunistring-2.dll => /usr/bin/cygunistring-2.dll (0x3fbc40000)<br>        cyglber-2.dll => /usr/bin/cyglber-2.dll (0x3fd730000)<br>        cygsasl2-3.dll => /usr/bin/cygsasl2-3.dll (0x3fc3f0000)<br>        cyggpg-error-0.dll => /usr/bin/cyggpg-error-0.dll (0x3fe6e0000)<br>        cyggcc_s-seh-1.dll => /usr/bin/cyggcc_s-seh-1.dll (0x3fee10000)<br><br>When I try to compile with extra Coding, the situation is getting Worse ..<br><br>int main()<br>{<br>  BIO *cbio;<br>  ERR_load_crypto_strings();<br>  cbio = BIO_new_connect("localhost:http");<br>  if(BIO_do_connect(cbio) <= 0) {<br>    fprintf(stderr, "Error connecting to serve\n");<br>    ERR_print_errors_fp(stderr);<br>  }<br>  return 0;<br>}<br><br>$ g++ -O0 -std=c++11 -x c++ -lssl -lcrypto ./tls.hpp<br>/usr/lib/gcc/x86_64-pc-cygwin/11/../../../../x86_64-pc-cygwin/bin/ld: /tmp/cc4wqkGZ.o:tls.hpp:(.text+0x23): undefined reference to `OPENSSL_init_crypto'<br>/usr/lib/gcc/x86_64-pc-cygwin/11/../../../../x86_64-pc-cygwin/bin/ld: /tmp/cc4wqkGZ.o:tls.hpp:(.text+0x32): undefined reference to `BIO_new_connect'<br>/usr/lib/gcc/x86_64-pc-cygwin/11/../../../../x86_64-pc-cygwin/bin/ld: /tmp/cc4wqkGZ.o:tls.hpp:(.text+0x53): undefined reference to `BIO_ctrl'<br>/usr/lib/gcc/x86_64-pc-cygwin/11/../../../../x86_64-pc-cygwin/bin/ld: /tmp/cc4wqkGZ.o:tls.hpp:(.text+0x94): undefined reference to `ERR_print_errors_fp'<br>collect2: error: ld returned 1 exit status<br><br>Do I do something Wrong ? .. Am I missing something ?<br><br>Thank You in advance for Your help ..<br>Sincerely,<br></div>