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