botan icon indicating copy to clipboard operation
botan copied to clipboard

C++ related linker errors with static library under macOS

Open KizzyCode opened this issue 3 years ago • 2 comments

If I build a static library under macOS, I cannot link it to any C or Swift or Rust etc. application due to a lot of (C++ related?) linker errors.

Botan build steps:

cd "Botan-2.18.1"
./configure.py --prefix="./" --cc="clang" --build-targets="static"
make -j12 check install

Configure output:

   INFO: ./configure.py invoked with options "--prefix=./ --cc=clang --build-targets=static"
   INFO: Configuring to build Botan 2.18.1 (revision git:d4bd416702a65eddcc14ee06b9c1b674631e6ae3)
   INFO: Running under 2.7.16 (default, May  8 2021, 11:48:02) [GCC Apple LLVM 12.0.5 (clang-1205.0.19.59.6) [+internal-os, ptrauth-isa=deploy
   INFO: Autodetected platform information: OS="Darwin" machine="x86_64" proc="i386"
   INFO: Guessing target OS is darwin (use --os to set)
   INFO: Guessing target processor is a x86_64 (use --cpu to set)
   INFO: Using /etc/ssl/cert.pem as system certificate store
   INFO: Auto-detected compiler version 4.0
   INFO: Auto-detected compiler arch x86_64
   INFO: Target is clang:4.0-macos-x86_64
   INFO: Assuming target x86_64 is little endian
   INFO: Skipping (dependency failure): asio certstor_sqlite3 sessions_sqlite3
   INFO: Skipping (incompatible CPU): aes_armv8 aes_power8 sha1_armv8 sha2_32_armv8 sm4_armv8
   INFO: Skipping (incompatible OS): certstor_system_windows proc_walk win32_stats
   INFO: Skipping (no enabled compression schemes): compression
   INFO: Skipping (requires external dependency): boost bzip2 commoncrypto lzma openssl sqlite3 tpm zlib
   INFO: Loading modules: adler32 aead aes aes_ni aes_vperm aont argon2 aria asn1 auto_rng base base32 base58 base64 bcrypt bcrypt_pbkdf bigint blake2 block blowfish camellia cascade cast128 cast256 cbc cbc_mac ccm cecpq1 certstor_flatfile certstor_sql certstor_system certstor_system_macos cfb chacha chacha20poly1305 chacha_avx2 chacha_rng chacha_simd32 checksum cmac comb4p cpuid crc24 crc32 cryptobox ctr curve25519 des dev_random dh dl_algo dl_group dlies dsa dyn_load eax ec_group ecc_key ecdh ecdsa ecgdsa ecies eckcdsa ed25519 elgamal eme_oaep eme_pkcs1 eme_raw emsa1 emsa_pkcs1 emsa_pssr emsa_raw emsa_x931 entropy fd_unix ffi filters fpe_fe1 gcm getentropy ghash ghash_cpu ghash_vperm gmac gost_28147 gost_3410 gost_3411 hash hash_id hex hkdf hmac hmac_drbg hotp http_util idea idea_sse2 iso9796 kasumi kdf kdf1 kdf1_iso18033 kdf2 keccak keypair lion locking_allocator mac mce mceies md4 md5 mdx_hash mem_pool mgf1 misty1 mode_pad modes mp newhope nist_keywrap noekeon noekeon_simd numbertheory ocb ofb par_hash passhash9 pbes2 pbkdf pbkdf1 pbkdf2 pem pgp_s2k pk_pad pkcs11 poly1305 poly_dbl prf_tls prf_x942 processor_rng psk_db pubkey rc4 rdrand_rng rdseed rfc3394 rfc6979 rmd160 rng roughtime rsa salsa20 scrypt seed serpent serpent_avx2 serpent_simd sessions_sql sha1 sha1_sse2 sha1_x86 sha2_32 sha2_32_bmi2 sha2_32_x86 sha2_64 sha2_64_bmi2 sha3 sha3_bmi2 shacal2 shacal2_avx2 shacal2_simd shacal2_x86 shake shake_cipher simd simd_avx2 siphash siv skein sm2 sm3 sm4 socket sodium sp800_108 sp800_56a sp800_56c srp6 stateful_rng stream streebog system_rng thread_utils threefish_512 threefish_512_avx2 tiger tls tls_10 tls_cbc tss twofish utils uuid whirlpool x509 x919_mac xmss xtea xts
   INFO: Using symlink to link files into build dir (use --link-method to change)
   INFO: Botan 2.18.1 (revision git:d4bd416702a65eddcc14ee06b9c1b674631e6ae3) (release dated 20210509) build setup is complete

For the full build output, please see Full Build Output.txt.

Test application test_botan.c:

#include <stdio.h>
#include <stdint.h>

extern uint32_t botan_ffi_api_version();

int main() {
    printf("Version: %d\n", botan_ffi_api_version());
    return 0;
}

Build steps:

clang -L"./Botan-2.18.1/lib/" -l"botan-2" -o "test_botan" "test_botan.c"

Full build output with linker errors:

Undefined symbols for architecture x86_64:
  "std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::find(char, unsigned long) const", referenced from:
      Botan::parse_algorithm_name(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in libbotan-2.a(utils_parsing.o)
  "std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::compare(unsigned long, unsigned long, char const*, unsigned long) const", referenced from:
      Botan_FFI::ffi_error_exception_thrown(char const*, char const*, int) in libbotan-2.a(ffi.o)
      Botan::hex_decode(unsigned char*, char const*, unsigned long, unsigned long&, bool) in libbotan-2.a(codec_hex.o)
      Botan::(anonymous namespace)::Base64::check_bad_char(unsigned char, char, bool) in libbotan-2.a(codec_base64.o)
      Botan::CPUID::bit_from_string(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in libbotan-2.a(utils_cpuid.o)
  "std::__1::__vector_base_common<true>::__throw_length_error() const", referenced from:
      Botan::hex_decode_locked(char const*, unsigned long, bool) in libbotan-2.a(codec_hex.o)
      Botan::hex_decode(char const*, unsigned long, bool) in libbotan-2.a(codec_hex.o)
      std::__1::vector<unsigned char, Botan::secure_allocator<unsigned char> >::__append(unsigned long) in libbotan-2.a(codec_hex.o)
      std::__1::vector<unsigned char, Botan::secure_allocator<unsigned char> >::__append(unsigned long) in libbotan-2.a(codec_base64.o)
      Botan::OS::allocate_locked_pages(unsigned long) in libbotan-2.a(utils_os_utils.o)
      std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >::push_back(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&) in libbotan-2.a(utils_cpuid.o)
      std::__1::vector<unsigned long long, std::__1::allocator<unsigned long long> >::__append(unsigned long) in libbotan-2.a(utils_mem_pool.o)
      ...
  "std::__1::__basic_string_common<true>::__throw_length_error() const", referenced from:
      std::__1::__function::__func<botan_base64_decode::$_3, std::__1::allocator<botan_base64_decode::$_3>, int ()>::operator()() in libbotan-2.a(ffi.o)
      Botan::hex_encode(unsigned char const*, unsigned long, bool) in libbotan-2.a(codec_hex.o)
      std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> >::str() const in libbotan-2.a(utils_version.o)
      Botan::base64_encode(unsigned char const*, unsigned long) in libbotan-2.a(codec_base64.o)
      std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> >::str() const in libbotan-2.a(utils_assert.o)
      Botan::Exception::Exception(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::exception const&) in libbotan-2.a(utils_exceptn.o)
      std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > std::__1::operator+<char, std::__1::char_traits<char>, std::__1::allocator<char> >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, char const*) in libbotan-2.a(utils_exceptn.o)
      ...
  "std::__1::locale::has_facet(std::__1::locale::id&) const", referenced from:
      std::__1::basic_filebuf<char, std::__1::char_traits<char> >::basic_filebuf() in libbotan-2.a(utils_data_src.o)
  "std::__1::locale::use_facet(std::__1::locale::id&) const", referenced from:
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in libbotan-2.a(utils_version.o)
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in libbotan-2.a(utils_assert.o)
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in libbotan-2.a(utils_cpuid.o)
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in libbotan-2.a(asn1_oid.o)
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in libbotan-2.a(asn1_obj.o)
      std::__1::basic_filebuf<char, std::__1::char_traits<char> >::basic_filebuf() in libbotan-2.a(utils_data_src.o)
      std::__1::basic_filebuf<char, std::__1::char_traits<char> >::imbue(std::__1::locale const&) in libbotan-2.a(utils_data_src.o)
      ...
  "std::__1::ios_base::getloc() const", referenced from:
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in libbotan-2.a(utils_version.o)
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in libbotan-2.a(utils_assert.o)
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in libbotan-2.a(utils_cpuid.o)
      Botan::OID::to_string() const in libbotan-2.a(asn1_oid.o)
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in libbotan-2.a(asn1_oid.o)
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in libbotan-2.a(asn1_obj.o)
  "std::exception::what() const", referenced from:
      vtable for std::__1::bad_function_call in libbotan-2.a(ffi.o)
      vtable for std::__1::bad_function_call in libbotan-2.a(utils_os_utils.o)
      vtable for std::__1::bad_function_call in libbotan-2.a(utils_parsing.o)
      vtable for std::__1::bad_function_call in libbotan-2.a(asn1_der_enc.o)
  "std::logic_error::logic_error(char const*)", referenced from:
      std::length_error::length_error(char const*) in libbotan-2.a(utils_os_utils.o)
      std::length_error::length_error(char const*) in libbotan-2.a(utils_cpuid.o)
      std::length_error::length_error(char const*) in libbotan-2.a(utils_mem_pool.o)
      std::length_error::length_error(char const*) in libbotan-2.a(utils_parsing.o)
      std::length_error::length_error(char const*) in libbotan-2.a(asn1_oid.o)
      std::length_error::length_error(char const*) in libbotan-2.a(asn1_der_enc.o)
      std::length_error::length_error(char const*) in libbotan-2.a(asn1_oids.o)
      ...
  "std::length_error::~length_error()", referenced from:
      std::__1::__throw_length_error(char const*) in libbotan-2.a(utils_os_utils.o)
      std::__1::__throw_length_error(char const*) in libbotan-2.a(utils_cpuid.o)
      std::__1::__throw_length_error(char const*) in libbotan-2.a(utils_mem_pool.o)
      std::__1::__throw_length_error(char const*) in libbotan-2.a(utils_parsing.o)
      std::__1::__throw_length_error(char const*) in libbotan-2.a(asn1_oid.o)
      std::__1::__throw_length_error(char const*) in libbotan-2.a(asn1_der_enc.o)
      std::__1::__throw_length_error(char const*) in libbotan-2.a(asn1_oids.o)
      ...
  "std::__1::__next_prime(unsigned long)", referenced from:
      std::__1::__hash_table<std::__1::__hash_value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::__unordered_map_hasher<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::__hash_value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::hash<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, true>, std::__1::__unordered_map_equal<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::__hash_value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::equal_to<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, true>, std::__1::allocator<std::__1::__hash_value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > >::rehash(unsigned long) in libbotan-2.a(asn1_oids.o)
      std::__1::__hash_table<std::__1::__hash_value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, Botan::OID>, std::__1::__unordered_map_hasher<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::__hash_value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, Botan::OID>, std::__1::hash<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, true>, std::__1::__unordered_map_equal<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::__hash_value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, Botan::OID>, std::__1::equal_to<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, true>, std::__1::allocator<std::__1::__hash_value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, Botan::OID> > >::rehash(unsigned long) in libbotan-2.a(asn1_oids.o)
      std::__1::__hash_table<std::__1::__hash_value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::__unordered_map_hasher<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::__hash_value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::hash<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, true>, std::__1::__unordered_map_equal<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::__hash_value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::equal_to<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, true>, std::__1::allocator<std::__1::__hash_value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > >::rehash(unsigned long) in libbotan-2.a(asn1_oid_maps.o)
      std::__1::__hash_table<std::__1::__hash_value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, Botan::OID>, std::__1::__unordered_map_hasher<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::__hash_value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, Botan::OID>, std::__1::hash<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, true>, std::__1::__unordered_map_equal<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::__hash_value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, Botan::OID>, std::__1::equal_to<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, true>, std::__1::allocator<std::__1::__hash_value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, Botan::OID> > >::rehash(unsigned long) in libbotan-2.a(asn1_oid_maps.o)
  "std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::append(char const*)", referenced from:
      Botan::hex_decode(unsigned char*, char const*, unsigned long, unsigned long&, bool) in libbotan-2.a(codec_hex.o)
      Botan::base64_decode(unsigned char*, char const*, unsigned long, bool) in libbotan-2.a(codec_base64.o)
      Botan::base64_decode(char const*, unsigned long, bool) in libbotan-2.a(codec_base64.o)
      Botan::(anonymous namespace)::Base64::check_bad_char(unsigned char, char, bool) in libbotan-2.a(codec_base64.o)
      Botan::Exception::Exception(char const*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in libbotan-2.a(utils_exceptn.o)
      Botan::Lookup_Error::Lookup_Error(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in libbotan-2.a(utils_exceptn.o)
      Botan::Invalid_IV_Length::Invalid_IV_Length(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, unsigned long) in libbotan-2.a(utils_exceptn.o)
      ...
  "std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::append(char const*, unsigned long)", referenced from:
      Botan::hex_decode(unsigned char*, char const*, unsigned long, unsigned long&, bool) in libbotan-2.a(codec_hex.o)
      Botan::(anonymous namespace)::Base64::check_bad_char(unsigned char, char, bool) in libbotan-2.a(codec_base64.o)
      Botan::Exception::Exception(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::exception const&) in libbotan-2.a(utils_exceptn.o)
      std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > std::__1::operator+<char, std::__1::char_traits<char>, std::__1::allocator<char> >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, char const*) in libbotan-2.a(utils_exceptn.o)
      Botan::Exception::Exception(char const*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in libbotan-2.a(utils_exceptn.o)
      Botan::Invalid_Argument::Invalid_Argument(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in libbotan-2.a(utils_exceptn.o)
      Botan::Lookup_Error::Lookup_Error(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in libbotan-2.a(utils_exceptn.o)
      ...
  "std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::assign(char const*)", referenced from:
      Botan::hex_decode(unsigned char*, char const*, unsigned long, unsigned long&, bool) in libbotan-2.a(codec_hex.o)
      Botan::(anonymous namespace)::Base64::check_bad_char(unsigned char, char, bool) in libbotan-2.a(codec_base64.o)
      Botan::OS::read_env_variable(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in libbotan-2.a(utils_os_utils.o)
  "std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::insert(unsigned long, char const*)", referenced from:
      Botan::Invalid_IV_Length::Invalid_IV_Length(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, unsigned long) in libbotan-2.a(utils_exceptn.o)
      Botan::Charset::transcode(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, Botan::Character_Set, Botan::Character_Set) in libbotan-2.a(utils_charset.o)
      Botan::asn1_tag_to_string(Botan::ASN1_Tag) in libbotan-2.a(asn1_obj.o)
      Botan::asn1_class_to_string(Botan::ASN1_Tag) in libbotan-2.a(asn1_obj.o)
      Botan::DER_Encoder::add_object(Botan::ASN1_Tag, Botan::ASN1_Tag, unsigned char const*, unsigned long) in libbotan-2.a(asn1_der_enc.o)
      Botan::OIDS::oid2str_or_throw(Botan::OID const&) in libbotan-2.a(asn1_oids.o)
  "std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::resize(unsigned long, char)", referenced from:
      std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> >::overflow(int) in libbotan-2.a(utils_version.o)
      std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> >::overflow(int) in libbotan-2.a(utils_assert.o)
      std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> >::overflow(int) in libbotan-2.a(asn1_oid.o)
      std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> >::overflow(int) in libbotan-2.a(asn1_obj.o)
  "std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::push_back(char)", referenced from:
      std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> >::overflow(int) in libbotan-2.a(utils_version.o)
      std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> >::overflow(int) in libbotan-2.a(utils_assert.o)
      Botan::timespec_to_u32bit(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in libbotan-2.a(utils_parsing.o)
      Botan::parse_algorithm_name(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in libbotan-2.a(utils_parsing.o)
      Botan::split_on_pred(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::function<bool (char)>) in libbotan-2.a(utils_parsing.o)
      Botan::string_join(std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > const&, char) in libbotan-2.a(utils_parsing.o)
      Botan::erase_chars(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::set<char, std::__1::less<char>, std::__1::allocator<char> > const&) in libbotan-2.a(utils_parsing.o)
      ...
  "std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::basic_string(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)", referenced from:
      Botan::Exception::Exception(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in libbotan-2.a(utils_exceptn.o)
      Botan::Exception::Exception(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in libbotan-2.a(utils_exceptn.o)
      Botan::Invalid_Argument::Invalid_Argument(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in libbotan-2.a(utils_exceptn.o)
      Botan::Invalid_Argument::Invalid_Argument(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in libbotan-2.a(utils_exceptn.o)
      Botan::Invalid_Argument::Invalid_Argument(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in libbotan-2.a(utils_exceptn.o)
      Botan::Lookup_Error::Lookup_Error(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in libbotan-2.a(utils_exceptn.o)
      Botan::Internal_Error::Internal_Error(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in libbotan-2.a(utils_exceptn.o)
      ...
  "std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::basic_string(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, unsigned long, unsigned long, std::__1::allocator<char> const&)", referenced from:
      Botan::timespec_to_u32bit(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in libbotan-2.a(utils_parsing.o)
      Botan::parse_algorithm_name(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in libbotan-2.a(utils_parsing.o)
  "std::__1::basic_istream<char, std::__1::char_traits<char> >::read(char*, long)", referenced from:
      Botan::DataSource_Stream::read(unsigned char*, unsigned long) in libbotan-2.a(utils_data_src.o)
      Botan::DataSource_Stream::peek(unsigned char*, unsigned long, unsigned long) const in libbotan-2.a(utils_data_src.o)
  "std::__1::basic_istream<char, std::__1::char_traits<char> >::seekg(std::__1::fpos<__mbstate_t>)", referenced from:
      Botan::DataSource_Stream::check_available(unsigned long) in libbotan-2.a(utils_data_src.o)
  "std::__1::basic_istream<char, std::__1::char_traits<char> >::seekg(long long, std::__1::ios_base::seekdir)", referenced from:
      Botan::DataSource_Stream::check_available(unsigned long) in libbotan-2.a(utils_data_src.o)
      Botan::DataSource_Stream::peek(unsigned char*, unsigned long, unsigned long) const in libbotan-2.a(utils_data_src.o)
  "std::__1::basic_istream<char, std::__1::char_traits<char> >::tellg()", referenced from:
      Botan::DataSource_Stream::check_available(unsigned long) in libbotan-2.a(utils_data_src.o)
  "std::__1::basic_istream<char, std::__1::char_traits<char> >::~basic_istream()", referenced from:
      construction vtable for std::__1::basic_istream<char, std::__1::char_traits<char> >-in-std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in libbotan-2.a(asn1_obj.o)
      construction vtable for std::__1::basic_istream<char, std::__1::char_traits<char> >-in-std::__1::basic_ifstream<char, std::__1::char_traits<char> > in libbotan-2.a(utils_data_src.o)
  "std::__1::basic_istream<char, std::__1::char_traits<char> >::~basic_istream()", referenced from:
      construction vtable for std::__1::basic_istream<char, std::__1::char_traits<char> >-in-std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in libbotan-2.a(asn1_obj.o)
      construction vtable for std::__1::basic_istream<char, std::__1::char_traits<char> >-in-std::__1::basic_ifstream<char, std::__1::char_traits<char> > in libbotan-2.a(utils_data_src.o)
  "std::__1::basic_istream<char, std::__1::char_traits<char> >::~basic_istream()", referenced from:
      Botan::DataSource_Stream::DataSource_Stream(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, bool) in libbotan-2.a(utils_data_src.o)
      std::__1::basic_ifstream<char, std::__1::char_traits<char> >::~basic_ifstream() in libbotan-2.a(utils_data_src.o)
      std::__1::basic_ifstream<char, std::__1::char_traits<char> >::~basic_ifstream() in libbotan-2.a(utils_data_src.o)
      virtual thunk to std::__1::basic_ifstream<char, std::__1::char_traits<char> >::~basic_ifstream() in libbotan-2.a(utils_data_src.o)
      virtual thunk to std::__1::basic_ifstream<char, std::__1::char_traits<char> >::~basic_ifstream() in libbotan-2.a(utils_data_src.o)
  "std::__1::basic_ostream<char, std::__1::char_traits<char> >::sentry::sentry(std::__1::basic_ostream<char, std::__1::char_traits<char> >&)", referenced from:
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in libbotan-2.a(utils_version.o)
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in libbotan-2.a(utils_assert.o)
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in libbotan-2.a(utils_cpuid.o)
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in libbotan-2.a(asn1_oid.o)
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in libbotan-2.a(asn1_obj.o)
  "std::__1::basic_ostream<char, std::__1::char_traits<char> >::sentry::~sentry()", referenced from:
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in libbotan-2.a(utils_version.o)
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in libbotan-2.a(utils_assert.o)
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in libbotan-2.a(utils_cpuid.o)
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in libbotan-2.a(asn1_oid.o)
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in libbotan-2.a(asn1_obj.o)
  "std::__1::basic_ostream<char, std::__1::char_traits<char> >::~basic_ostream()", referenced from:
      construction vtable for std::__1::basic_ostream<char, std::__1::char_traits<char> >-in-std::__1::basic_ostringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in libbotan-2.a(utils_version.o)
      construction vtable for std::__1::basic_ostream<char, std::__1::char_traits<char> >-in-std::__1::basic_ostringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in libbotan-2.a(utils_assert.o)
      construction vtable for std::__1::basic_ostream<char, std::__1::char_traits<char> >-in-std::__1::basic_ostringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in libbotan-2.a(asn1_oid.o)
      construction vtable for std::__1::basic_ostream<char, std::__1::char_traits<char> >-in-std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in libbotan-2.a(asn1_obj.o)
  "std::__1::basic_ostream<char, std::__1::char_traits<char> >::~basic_ostream()", referenced from:
      construction vtable for std::__1::basic_ostream<char, std::__1::char_traits<char> >-in-std::__1::basic_ostringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in libbotan-2.a(utils_version.o)
      construction vtable for std::__1::basic_ostream<char, std::__1::char_traits<char> >-in-std::__1::basic_ostringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in libbotan-2.a(utils_assert.o)
      construction vtable for std::__1::basic_ostream<char, std::__1::char_traits<char> >-in-std::__1::basic_ostringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in libbotan-2.a(asn1_oid.o)
      construction vtable for std::__1::basic_ostream<char, std::__1::char_traits<char> >-in-std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in libbotan-2.a(asn1_obj.o)
  "std::__1::basic_ostream<char, std::__1::char_traits<char> >::~basic_ostream()", referenced from:
      Botan::runtime_version_check(unsigned int, unsigned int, unsigned int) in libbotan-2.a(utils_version.o)
      std::__1::basic_ostringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> >::~basic_ostringstream() in libbotan-2.a(utils_version.o)
      virtual thunk to std::__1::basic_ostringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> >::~basic_ostringstream() in libbotan-2.a(utils_version.o)
      std::__1::basic_ostringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> >::~basic_ostringstream() in libbotan-2.a(utils_version.o)
      virtual thunk to std::__1::basic_ostringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> >::~basic_ostringstream() in libbotan-2.a(utils_version.o)
      Botan::throw_invalid_argument(char const*, char const*, char const*) in libbotan-2.a(utils_assert.o)
      std::__1::basic_ostringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> >::~basic_ostringstream() in libbotan-2.a(utils_assert.o)
      ...
  "std::__1::basic_ostream<char, std::__1::char_traits<char> >::operator<<(int)", referenced from:
      Botan::assertion_failure(char const*, char const*, char const*, char const*, int) in libbotan-2.a(utils_assert.o)
  "std::__1::basic_ostream<char, std::__1::char_traits<char> >::operator<<(unsigned int)", referenced from:
      Botan::runtime_version_check(unsigned int, unsigned int, unsigned int) in libbotan-2.a(utils_version.o)
      Botan::OID::to_string() const in libbotan-2.a(asn1_oid.o)
  "std::__1::basic_iostream<char, std::__1::char_traits<char> >::~basic_iostream()", referenced from:
      construction vtable for std::__1::basic_iostream<char, std::__1::char_traits<char> >-in-std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in libbotan-2.a(asn1_obj.o)
  "std::__1::basic_iostream<char, std::__1::char_traits<char> >::~basic_iostream()", referenced from:
      construction vtable for std::__1::basic_iostream<char, std::__1::char_traits<char> >-in-std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in libbotan-2.a(asn1_obj.o)
  "std::__1::basic_iostream<char, std::__1::char_traits<char> >::~basic_iostream()", referenced from:
      Botan::BER_Object::assert_is_a(Botan::ASN1_Tag, Botan::ASN1_Tag, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) const in libbotan-2.a(asn1_obj.o)
      std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> >::~basic_stringstream() in libbotan-2.a(asn1_obj.o)
      non-virtual thunk to std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> >::~basic_stringstream() in libbotan-2.a(asn1_obj.o)
      virtual thunk to std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> >::~basic_stringstream() in libbotan-2.a(asn1_obj.o)
      std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> >::~basic_stringstream() in libbotan-2.a(asn1_obj.o)
      non-virtual thunk to std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> >::~basic_stringstream() in libbotan-2.a(asn1_obj.o)
      virtual thunk to std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> >::~basic_stringstream() in libbotan-2.a(asn1_obj.o)
      ...
  "std::__1::basic_streambuf<char, std::__1::char_traits<char> >::sync()", referenced from:
      vtable for std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> > in libbotan-2.a(utils_version.o)
      vtable for std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> > in libbotan-2.a(utils_assert.o)
      vtable for std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> > in libbotan-2.a(asn1_oid.o)
      vtable for std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> > in libbotan-2.a(asn1_obj.o)
  "std::__1::basic_streambuf<char, std::__1::char_traits<char> >::imbue(std::__1::locale const&)", referenced from:
      vtable for std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> > in libbotan-2.a(utils_version.o)
      vtable for std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> > in libbotan-2.a(utils_assert.o)
      vtable for std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> > in libbotan-2.a(asn1_oid.o)
      vtable for std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> > in libbotan-2.a(asn1_obj.o)
  "std::__1::basic_streambuf<char, std::__1::char_traits<char> >::uflow()", referenced from:
      vtable for std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> > in libbotan-2.a(utils_version.o)
      vtable for std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> > in libbotan-2.a(utils_assert.o)
      vtable for std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> > in libbotan-2.a(asn1_oid.o)
      vtable for std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> > in libbotan-2.a(asn1_obj.o)
      vtable for std::__1::basic_filebuf<char, std::__1::char_traits<char> > in libbotan-2.a(utils_data_src.o)
  "std::__1::basic_streambuf<char, std::__1::char_traits<char> >::setbuf(char*, long)", referenced from:
      vtable for std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> > in libbotan-2.a(utils_version.o)
      vtable for std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> > in libbotan-2.a(utils_assert.o)
      vtable for std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> > in libbotan-2.a(asn1_oid.o)
      vtable for std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> > in libbotan-2.a(asn1_obj.o)
  "std::__1::basic_streambuf<char, std::__1::char_traits<char> >::xsgetn(char*, long)", referenced from:
      vtable for std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> > in libbotan-2.a(utils_version.o)
      vtable for std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> > in libbotan-2.a(utils_assert.o)
      vtable for std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> > in libbotan-2.a(asn1_oid.o)
      vtable for std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> > in libbotan-2.a(asn1_obj.o)
      vtable for std::__1::basic_filebuf<char, std::__1::char_traits<char> > in libbotan-2.a(utils_data_src.o)
  "std::__1::basic_streambuf<char, std::__1::char_traits<char> >::xsputn(char const*, long)", referenced from:
      vtable for std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> > in libbotan-2.a(utils_version.o)
      vtable for std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> > in libbotan-2.a(utils_assert.o)
      vtable for std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> > in libbotan-2.a(asn1_oid.o)
      vtable for std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> > in libbotan-2.a(asn1_obj.o)
      vtable for std::__1::basic_filebuf<char, std::__1::char_traits<char> > in libbotan-2.a(utils_data_src.o)
  "std::__1::basic_streambuf<char, std::__1::char_traits<char> >::showmanyc()", referenced from:
      vtable for std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> > in libbotan-2.a(utils_version.o)
      vtable for std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> > in libbotan-2.a(utils_assert.o)
      vtable for std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> > in libbotan-2.a(asn1_oid.o)
      vtable for std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> > in libbotan-2.a(asn1_obj.o)
      vtable for std::__1::basic_filebuf<char, std::__1::char_traits<char> > in libbotan-2.a(utils_data_src.o)
  "std::__1::basic_streambuf<char, std::__1::char_traits<char> >::basic_streambuf()", referenced from:
      Botan::runtime_version_check(unsigned int, unsigned int, unsigned int) in libbotan-2.a(utils_version.o)
      Botan::throw_invalid_argument(char const*, char const*, char const*) in libbotan-2.a(utils_assert.o)
      Botan::throw_invalid_state(char const*, char const*, char const*) in libbotan-2.a(utils_assert.o)
      Botan::assertion_failure(char const*, char const*, char const*, char const*, int) in libbotan-2.a(utils_assert.o)
      Botan::OID::to_string() const in libbotan-2.a(asn1_oid.o)
      Botan::BER_Object::assert_is_a(Botan::ASN1_Tag, Botan::ASN1_Tag, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) const in libbotan-2.a(asn1_obj.o)
      std::__1::basic_filebuf<char, std::__1::char_traits<char> >::basic_filebuf() in libbotan-2.a(utils_data_src.o)
      ...
  "std::__1::basic_streambuf<char, std::__1::char_traits<char> >::~basic_streambuf()", referenced from:
      Botan::runtime_version_check(unsigned int, unsigned int, unsigned int) in libbotan-2.a(utils_version.o)
      std::__1::basic_ostringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> >::~basic_ostringstream() in libbotan-2.a(utils_version.o)
      virtual thunk to std::__1::basic_ostringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> >::~basic_ostringstream() in libbotan-2.a(utils_version.o)
      std::__1::basic_ostringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> >::~basic_ostringstream() in libbotan-2.a(utils_version.o)
      virtual thunk to std::__1::basic_ostringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> >::~basic_ostringstream() in libbotan-2.a(utils_version.o)
      std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> >::~basic_stringbuf() in libbotan-2.a(utils_version.o)
      std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> >::~basic_stringbuf() in libbotan-2.a(utils_version.o)
      ...
  "std::__1::ctype<char>::id", referenced from:
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in libbotan-2.a(utils_version.o)
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in libbotan-2.a(utils_assert.o)
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in libbotan-2.a(utils_cpuid.o)
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in libbotan-2.a(asn1_oid.o)
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in libbotan-2.a(asn1_obj.o)
  "std::__1::mutex::lock()", referenced from:
      Botan::Memory_Pool::allocate(unsigned long) in libbotan-2.a(utils_mem_pool.o)
      Botan::Memory_Pool::deallocate(void*, unsigned long) in libbotan-2.a(utils_mem_pool.o)
      Botan::(anonymous namespace)::OID_Map::add_oid2str(Botan::OID const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in libbotan-2.a(asn1_oids.o)
      Botan::(anonymous namespace)::OID_Map::add_str2oid(Botan::OID const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in libbotan-2.a(asn1_oids.o)
      Botan::OIDS::oid2str_or_empty(Botan::OID const&) in libbotan-2.a(asn1_oids.o)
      Botan::OIDS::str2oid_or_empty(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in libbotan-2.a(asn1_oids.o)
      Botan::OIDS::have_oid(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in libbotan-2.a(asn1_oids.o)
      ...
  "std::__1::mutex::unlock()", referenced from:
      Botan::Memory_Pool::allocate(unsigned long) in libbotan-2.a(utils_mem_pool.o)
      Botan::Memory_Pool::deallocate(void*, unsigned long) in libbotan-2.a(utils_mem_pool.o)
      Botan::(anonymous namespace)::OID_Map::add_oid2str(Botan::OID const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in libbotan-2.a(asn1_oids.o)
      Botan::(anonymous namespace)::OID_Map::add_str2oid(Botan::OID const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in libbotan-2.a(asn1_oids.o)
      Botan::OIDS::oid2str_or_empty(Botan::OID const&) in libbotan-2.a(asn1_oids.o)
      Botan::OIDS::str2oid_or_empty(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in libbotan-2.a(asn1_oids.o)
      Botan::OIDS::have_oid(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in libbotan-2.a(asn1_oids.o)
      ...
  "std::__1::mutex::~mutex()", referenced from:
      Botan::Memory_Pool::Memory_Pool(std::__1::vector<void*, std::__1::allocator<void*> > const&, unsigned long) in libbotan-2.a(utils_mem_pool.o)
      Botan::Memory_Pool::~Memory_Pool() in libbotan-2.a(utils_mem_pool.o)
      Botan::Memory_Pool::~Memory_Pool() in libbotan-2.a(utils_mem_pool.o)
      Botan::(anonymous namespace)::OID_Map::global_registry() in libbotan-2.a(asn1_oids.o)
      Botan::(anonymous namespace)::OID_Map::~OID_Map() in libbotan-2.a(asn1_oids.o)
  "std::__1::stoul(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, unsigned long*, int)", referenced from:
      Botan::OS::read_env_variable_sz(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, unsigned long) in libbotan-2.a(utils_os_utils.o)
      Botan::to_u32bit(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in libbotan-2.a(utils_parsing.o)
  "std::__1::chrono::steady_clock::now()", referenced from:
      Botan::OS::get_high_resolution_clock() in libbotan-2.a(utils_os_utils.o)
  "std::__1::chrono::system_clock::now()", referenced from:
      Botan::OS::get_system_timestamp_ns() in libbotan-2.a(utils_os_utils.o)
  "std::__1::locale::locale(char const*)", referenced from:
      Botan::OID::to_string() const in libbotan-2.a(asn1_oid.o)
  "std::__1::locale::locale(std::__1::locale const&)", referenced from:
      Botan::OID::to_string() const in libbotan-2.a(asn1_oid.o)
      std::__1::basic_filebuf<char, std::__1::char_traits<char> >::basic_filebuf() in libbotan-2.a(utils_data_src.o)
  "std::__1::locale::~locale()", referenced from:
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in libbotan-2.a(utils_version.o)
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in libbotan-2.a(utils_assert.o)
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in libbotan-2.a(utils_cpuid.o)
      Botan::OID::to_string() const in libbotan-2.a(asn1_oid.o)
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in libbotan-2.a(asn1_oid.o)
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in libbotan-2.a(asn1_obj.o)
      std::__1::basic_filebuf<char, std::__1::char_traits<char> >::basic_filebuf() in libbotan-2.a(utils_data_src.o)
      ...
  "std::__1::locale::operator=(std::__1::locale const&)", referenced from:
      Botan::OID::to_string() const in libbotan-2.a(asn1_oid.o)
  "std::__1::thread::hardware_concurrency()", referenced from:
      Botan::OS::get_cpu_total() in libbotan-2.a(utils_os_utils.o)
      Botan::OS::get_cpu_available() in libbotan-2.a(utils_os_utils.o)
  "std::__1::codecvt<char, char, __mbstate_t>::id", referenced from:
      std::__1::basic_filebuf<char, std::__1::char_traits<char> >::basic_filebuf() in libbotan-2.a(utils_data_src.o)
      std::__1::basic_filebuf<char, std::__1::char_traits<char> >::imbue(std::__1::locale const&) in libbotan-2.a(utils_data_src.o)
  "std::__1::ios_base::__set_badbit_and_consider_rethrow()", referenced from:
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in libbotan-2.a(utils_version.o)
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in libbotan-2.a(utils_assert.o)
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in libbotan-2.a(utils_cpuid.o)
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in libbotan-2.a(asn1_oid.o)
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in libbotan-2.a(asn1_obj.o)
  "std::__1::ios_base::init(void*)", referenced from:
      Botan::runtime_version_check(unsigned int, unsigned int, unsigned int) in libbotan-2.a(utils_version.o)
      Botan::throw_invalid_argument(char const*, char const*, char const*) in libbotan-2.a(utils_assert.o)
      Botan::throw_invalid_state(char const*, char const*, char const*) in libbotan-2.a(utils_assert.o)
      Botan::assertion_failure(char const*, char const*, char const*, char const*, int) in libbotan-2.a(utils_assert.o)
      Botan::OID::to_string() const in libbotan-2.a(asn1_oid.o)
      Botan::BER_Object::assert_is_a(Botan::ASN1_Tag, Botan::ASN1_Tag, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) const in libbotan-2.a(asn1_obj.o)
      Botan::DataSource_Stream::DataSource_Stream(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, bool) in libbotan-2.a(utils_data_src.o)
      ...
  "std::__1::ios_base::clear(unsigned int)", referenced from:
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in libbotan-2.a(utils_version.o)
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in libbotan-2.a(utils_assert.o)
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in libbotan-2.a(utils_cpuid.o)
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in libbotan-2.a(asn1_oid.o)
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in libbotan-2.a(asn1_obj.o)
      Botan::DataSource_Stream::peek(unsigned char*, unsigned long, unsigned long) const in libbotan-2.a(utils_data_src.o)
      Botan::DataSource_Stream::DataSource_Stream(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, bool) in libbotan-2.a(utils_data_src.o)
      ...
  "std::__1::ios_base::imbue(std::__1::locale const&)", referenced from:
      Botan::OID::to_string() const in libbotan-2.a(asn1_oid.o)
  "std::__1::basic_ios<char, std::__1::char_traits<char> >::~basic_ios()", referenced from:
      Botan::runtime_version_check(unsigned int, unsigned int, unsigned int) in libbotan-2.a(utils_version.o)
      std::__1::basic_ostringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> >::~basic_ostringstream() in libbotan-2.a(utils_version.o)
      virtual thunk to std::__1::basic_ostringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> >::~basic_ostringstream() in libbotan-2.a(utils_version.o)
      std::__1::basic_ostringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> >::~basic_ostringstream() in libbotan-2.a(utils_version.o)
      virtual thunk to std::__1::basic_ostringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> >::~basic_ostringstream() in libbotan-2.a(utils_version.o)
      Botan::throw_invalid_argument(char const*, char const*, char const*) in libbotan-2.a(utils_assert.o)
      std::__1::basic_ostringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> >::~basic_ostringstream() in libbotan-2.a(utils_assert.o)
      ...
  "std::__1::to_string(int)", referenced from:
      Botan::System_Error::System_Error(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, int) in libbotan-2.a(utils_exceptn.o)
      Botan::ipv4_to_string(unsigned int) in libbotan-2.a(utils_parsing.o)
      Botan::Charset::transcode(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, Botan::Character_Set, Botan::Character_Set) in libbotan-2.a(utils_charset.o)
      Botan::Integer_Overflow_Detected::Integer_Overflow_Detected(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, int) in libbotan-2.a(asn1_ber_dec.o)
  "std::__1::to_string(unsigned int)", referenced from:
      Botan::BER_Object::assert_is_a(Botan::ASN1_Tag, Botan::ASN1_Tag, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) const in libbotan-2.a(asn1_obj.o)
      Botan::BER_Bad_Tag::BER_Bad_Tag(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, Botan::ASN1_Tag) in libbotan-2.a(asn1_obj.o)
      Botan::BER_Bad_Tag::BER_Bad_Tag(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, Botan::ASN1_Tag, Botan::ASN1_Tag) in libbotan-2.a(asn1_obj.o)
      Botan::DER_Encoder::add_object(Botan::ASN1_Tag, Botan::ASN1_Tag, unsigned char const*, unsigned long) in libbotan-2.a(asn1_der_enc.o)
  "std::__1::to_string(unsigned long)", referenced from:
      Botan::Invalid_Key_Length::Invalid_Key_Length(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, unsigned long) in libbotan-2.a(utils_exceptn.o)
      Botan::Invalid_IV_Length::Invalid_IV_Length(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, unsigned long) in libbotan-2.a(utils_exceptn.o)
      Botan::asn1_tag_to_string(Botan::ASN1_Tag) in libbotan-2.a(asn1_obj.o)
      Botan::asn1_class_to_string(Botan::ASN1_Tag) in libbotan-2.a(asn1_obj.o)
  "std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > std::__1::operator+<char, std::__1::char_traits<char>, std::__1::allocator<char> >(char const*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)", referenced from:
      Botan::Lookup_Error::Lookup_Error(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in libbotan-2.a(utils_exceptn.o)
      Botan::Internal_Error::Internal_Error(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in libbotan-2.a(utils_exceptn.o)
      Botan::Internal_Error::Internal_Error(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in libbotan-2.a(utils_exceptn.o)
      Botan::Key_Not_Set::Key_Not_Set(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in libbotan-2.a(utils_exceptn.o)
      Botan::Key_Not_Set::Key_Not_Set(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in libbotan-2.a(utils_exceptn.o)
      Botan::Policy_Violation::Policy_Violation(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in libbotan-2.a(utils_exceptn.o)
      Botan::Policy_Violation::Policy_Violation(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in libbotan-2.a(utils_exceptn.o)
      ...
  "std::bad_cast::bad_cast()", referenced from:
      std::__1::__throw_bad_cast() in libbotan-2.a(utils_data_src.o)
  "std::bad_cast::~bad_cast()", referenced from:
      std::__1::__throw_bad_cast() in libbotan-2.a(utils_data_src.o)
  "std::bad_alloc::bad_alloc()", referenced from:
      Botan::allocate_memory(unsigned long, unsigned long) in libbotan-2.a(utils_mem_ops.o)
  "std::bad_alloc::~bad_alloc()", referenced from:
      Botan::allocate_memory(unsigned long, unsigned long) in libbotan-2.a(utils_mem_ops.o)
  "std::exception::~exception()", referenced from:
      std::__1::bad_function_call::~bad_function_call() in libbotan-2.a(ffi.o)
      std::__1::bad_function_call::~bad_function_call() in libbotan-2.a(ffi.o)
      Botan::Invalid_Argument::~Invalid_Argument() in libbotan-2.a(codec_hex.o)
      Botan::Exception::~Exception() in libbotan-2.a(codec_hex.o)
      Botan::Exception::~Exception() in libbotan-2.a(codec_hex.o)
      Botan::Invalid_Argument::~Invalid_Argument() in libbotan-2.a(codec_base64.o)
      Botan::Exception::~Exception() in libbotan-2.a(codec_base64.o)
      ...
  "std::terminate()", referenced from:
      ___clang_call_terminate in libbotan-2.a(ffi.o)
      ___clang_call_terminate in libbotan-2.a(codec_hex.o)
      ___clang_call_terminate in libbotan-2.a(utils_version.o)
      ___clang_call_terminate in libbotan-2.a(codec_base64.o)
      ___clang_call_terminate in libbotan-2.a(utils_assert.o)
      ___clang_call_terminate in libbotan-2.a(utils_os_utils.o)
      ___clang_call_terminate in libbotan-2.a(utils_locking_allocator.o)
      ...
  "typeinfo for std::__1::basic_istream<char, std::__1::char_traits<char> >", referenced from:
      construction vtable for std::__1::basic_istream<char, std::__1::char_traits<char> >-in-std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in libbotan-2.a(asn1_obj.o)
      construction vtable for std::__1::basic_istream<char, std::__1::char_traits<char> >-in-std::__1::basic_ifstream<char, std::__1::char_traits<char> > in libbotan-2.a(utils_data_src.o)
      typeinfo for std::__1::basic_ifstream<char, std::__1::char_traits<char> > in libbotan-2.a(utils_data_src.o)
  "typeinfo for std::__1::basic_ostream<char, std::__1::char_traits<char> >", referenced from:
      construction vtable for std::__1::basic_ostream<char, std::__1::char_traits<char> >-in-std::__1::basic_ostringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in libbotan-2.a(utils_version.o)
      typeinfo for std::__1::basic_ostringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in libbotan-2.a(utils_version.o)
      construction vtable for std::__1::basic_ostream<char, std::__1::char_traits<char> >-in-std::__1::basic_ostringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in libbotan-2.a(utils_assert.o)
      typeinfo for std::__1::basic_ostringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in libbotan-2.a(utils_assert.o)
      construction vtable for std::__1::basic_ostream<char, std::__1::char_traits<char> >-in-std::__1::basic_ostringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in libbotan-2.a(asn1_oid.o)
      typeinfo for std::__1::basic_ostringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in libbotan-2.a(asn1_oid.o)
      construction vtable for std::__1::basic_ostream<char, std::__1::char_traits<char> >-in-std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in libbotan-2.a(asn1_obj.o)
      ...
  "typeinfo for std::__1::basic_iostream<char, std::__1::char_traits<char> >", referenced from:
      construction vtable for std::__1::basic_iostream<char, std::__1::char_traits<char> >-in-std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in libbotan-2.a(asn1_obj.o)
      typeinfo for std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in libbotan-2.a(asn1_obj.o)
  "typeinfo for std::__1::basic_streambuf<char, std::__1::char_traits<char> >", referenced from:
      typeinfo for std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> > in libbotan-2.a(utils_version.o)
      typeinfo for std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> > in libbotan-2.a(utils_assert.o)
      typeinfo for std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> > in libbotan-2.a(asn1_oid.o)
      typeinfo for std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> > in libbotan-2.a(asn1_obj.o)
      typeinfo for std::__1::basic_filebuf<char, std::__1::char_traits<char> > in libbotan-2.a(utils_data_src.o)
  "typeinfo for std::length_error", referenced from:
      std::__1::__throw_length_error(char const*) in libbotan-2.a(utils_os_utils.o)
      std::__1::__throw_length_error(char const*) in libbotan-2.a(utils_cpuid.o)
      std::__1::__throw_length_error(char const*) in libbotan-2.a(utils_mem_pool.o)
      std::__1::__throw_length_error(char const*) in libbotan-2.a(utils_parsing.o)
      std::__1::__throw_length_error(char const*) in libbotan-2.a(asn1_oid.o)
      std::__1::__throw_length_error(char const*) in libbotan-2.a(asn1_der_enc.o)
      std::__1::__throw_length_error(char const*) in libbotan-2.a(asn1_oids.o)
      ...
  "typeinfo for std::bad_cast", referenced from:
      std::__1::__throw_bad_cast() in libbotan-2.a(utils_data_src.o)
  "typeinfo for std::bad_alloc", referenced from:
      GCC_except_table1 in libbotan-2.a(ffi.o)
      Botan::allocate_memory(unsigned long, unsigned long) in libbotan-2.a(utils_mem_ops.o)
  "typeinfo for std::exception", referenced from:
      GCC_except_table1 in libbotan-2.a(ffi.o)
      typeinfo for Botan::Exception in libbotan-2.a(ffi.o)
      typeinfo for std::__1::bad_function_call in libbotan-2.a(ffi.o)
      typeinfo for Botan::Exception in libbotan-2.a(codec_hex.o)
      typeinfo for Botan::Exception in libbotan-2.a(codec_base64.o)
      typeinfo for Botan::Exception in libbotan-2.a(utils_assert.o)
      GCC_except_table11 in libbotan-2.a(utils_os_utils.o)
      ...
  "vtable for __cxxabiv1::__class_type_info", referenced from:
      typeinfo for std::__1::__function::__base<int ()> in libbotan-2.a(ffi.o)
      typeinfo for botan_hex_encode::$_0 in libbotan-2.a(ffi.o)
      typeinfo for botan_hex_decode::$_1 in libbotan-2.a(ffi.o)
      typeinfo for botan_base64_encode::$_2 in libbotan-2.a(ffi.o)
      typeinfo for botan_base64_decode::$_3 in libbotan-2.a(ffi.o)
      typeinfo for Botan::OS::Echo_Suppression in libbotan-2.a(utils_os_utils.o)
      typeinfo for std::__1::__function::__base<bool (char)> in libbotan-2.a(utils_parsing.o)
      ...
  NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
  "vtable for __cxxabiv1::__si_class_type_info", referenced from:
      typeinfo for Botan::Exception in libbotan-2.a(ffi.o)
      typeinfo for Botan_FFI::FFI_Error in libbotan-2.a(ffi.o)
      typeinfo for std::__1::bad_function_call in libbotan-2.a(ffi.o)
      typeinfo for std::__1::__function::__func<botan_hex_encode::$_0, std::__1::allocator<botan_hex_encode::$_0>, int ()> in libbotan-2.a(ffi.o)
      typeinfo for std::__1::__function::__func<botan_hex_decode::$_1, std::__1::allocator<botan_hex_decode::$_1>, int ()> in libbotan-2.a(ffi.o)
      typeinfo for std::__1::__function::__func<botan_base64_encode::$_2, std::__1::allocator<botan_base64_encode::$_2>, int ()> in libbotan-2.a(ffi.o)
      typeinfo for std::__1::__function::__func<botan_base64_decode::$_3, std::__1::allocator<botan_base64_decode::$_3>, int ()> in libbotan-2.a(ffi.o)
      ...
  NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
  "vtable for std::length_error", referenced from:
      std::length_error::length_error(char const*) in libbotan-2.a(utils_os_utils.o)
      std::length_error::length_error(char const*) in libbotan-2.a(utils_cpuid.o)
      std::length_error::length_error(char const*) in libbotan-2.a(utils_mem_pool.o)
      std::length_error::length_error(char const*) in libbotan-2.a(utils_parsing.o)
      std::length_error::length_error(char const*) in libbotan-2.a(asn1_oid.o)
      std::length_error::length_error(char const*) in libbotan-2.a(asn1_der_enc.o)
      std::length_error::length_error(char const*) in libbotan-2.a(asn1_oids.o)
      ...
  NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
  "non-virtual thunk to std::__1::basic_iostream<char, std::__1::char_traits<char> >::~basic_iostream()", referenced from:
      construction vtable for std::__1::basic_iostream<char, std::__1::char_traits<char> >-in-std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in libbotan-2.a(asn1_obj.o)
  "non-virtual thunk to std::__1::basic_iostream<char, std::__1::char_traits<char> >::~basic_iostream()", referenced from:
      construction vtable for std::__1::basic_iostream<char, std::__1::char_traits<char> >-in-std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in libbotan-2.a(asn1_obj.o)
  "virtual thunk to std::__1::basic_istream<char, std::__1::char_traits<char> >::~basic_istream()", referenced from:
      construction vtable for std::__1::basic_istream<char, std::__1::char_traits<char> >-in-std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in libbotan-2.a(asn1_obj.o)
      construction vtable for std::__1::basic_istream<char, std::__1::char_traits<char> >-in-std::__1::basic_ifstream<char, std::__1::char_traits<char> > in libbotan-2.a(utils_data_src.o)
  "virtual thunk to std::__1::basic_istream<char, std::__1::char_traits<char> >::~basic_istream()", referenced from:
      construction vtable for std::__1::basic_istream<char, std::__1::char_traits<char> >-in-std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in libbotan-2.a(asn1_obj.o)
      construction vtable for std::__1::basic_istream<char, std::__1::char_traits<char> >-in-std::__1::basic_ifstream<char, std::__1::char_traits<char> > in libbotan-2.a(utils_data_src.o)
  "virtual thunk to std::__1::basic_ostream<char, std::__1::char_traits<char> >::~basic_ostream()", referenced from:
      construction vtable for std::__1::basic_ostream<char, std::__1::char_traits<char> >-in-std::__1::basic_ostringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in libbotan-2.a(utils_version.o)
      construction vtable for std::__1::basic_ostream<char, std::__1::char_traits<char> >-in-std::__1::basic_ostringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in libbotan-2.a(utils_assert.o)
      construction vtable for std::__1::basic_ostream<char, std::__1::char_traits<char> >-in-std::__1::basic_ostringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in libbotan-2.a(asn1_oid.o)
      construction vtable for std::__1::basic_ostream<char, std::__1::char_traits<char> >-in-std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in libbotan-2.a(asn1_obj.o)
  "virtual thunk to std::__1::basic_ostream<char, std::__1::char_traits<char> >::~basic_ostream()", referenced from:
      construction vtable for std::__1::basic_ostream<char, std::__1::char_traits<char> >-in-std::__1::basic_ostringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in libbotan-2.a(utils_version.o)
      construction vtable for std::__1::basic_ostream<char, std::__1::char_traits<char> >-in-std::__1::basic_ostringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in libbotan-2.a(utils_assert.o)
      construction vtable for std::__1::basic_ostream<char, std::__1::char_traits<char> >-in-std::__1::basic_ostringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in libbotan-2.a(asn1_oid.o)
      construction vtable for std::__1::basic_ostream<char, std::__1::char_traits<char> >-in-std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in libbotan-2.a(asn1_obj.o)
  "virtual thunk to std::__1::basic_iostream<char, std::__1::char_traits<char> >::~basic_iostream()", referenced from:
      construction vtable for std::__1::basic_iostream<char, std::__1::char_traits<char> >-in-std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in libbotan-2.a(asn1_obj.o)
  "virtual thunk to std::__1::basic_iostream<char, std::__1::char_traits<char> >::~basic_iostream()", referenced from:
      construction vtable for std::__1::basic_iostream<char, std::__1::char_traits<char> >-in-std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> > in libbotan-2.a(asn1_obj.o)
  "operator delete[](void*)", referenced from:
      std::__1::basic_filebuf<char, std::__1::char_traits<char> >::imbue(std::__1::locale const&) in libbotan-2.a(utils_data_src.o)
      std::__1::basic_filebuf<char, std::__1::char_traits<char> >::setbuf(char*, long) in libbotan-2.a(utils_data_src.o)
      std::__1::basic_filebuf<char, std::__1::char_traits<char> >::~basic_filebuf() in libbotan-2.a(utils_data_src.o)
  "operator delete(void*)", referenced from:
      Botan_FFI::ffi_error_exception_thrown(char const*, char const*, int) in libbotan-2.a(ffi.o)
      std::__1::bad_function_call::~bad_function_call() in libbotan-2.a(ffi.o)
      std::__1::__function::__func<botan_hex_encode::$_0, std::__1::allocator<botan_hex_encode::$_0>, int ()>::~__func() in libbotan-2.a(ffi.o)
      std::__1::__function::__func<botan_hex_encode::$_0, std::__1::allocator<botan_hex_encode::$_0>, int ()>::destroy_deallocate() in libbotan-2.a(ffi.o)
      std::__1::__function::__func<botan_hex_decode::$_1, std::__1::allocator<botan_hex_decode::$_1>, int ()>::~__func() in libbotan-2.a(ffi.o)
      std::__1::__function::__func<botan_hex_decode::$_1, std::__1::allocator<botan_hex_decode::$_1>, int ()>::destroy_deallocate() in libbotan-2.a(ffi.o)
      std::__1::__function::__func<botan_hex_decode::$_1, std::__1::allocator<botan_hex_decode::$_1>, int ()>::operator()() in libbotan-2.a(ffi.o)
      ...
  "operator new[](unsigned long)", referenced from:
      std::__1::basic_filebuf<char, std::__1::char_traits<char> >::imbue(std::__1::locale const&) in libbotan-2.a(utils_data_src.o)
      std::__1::basic_filebuf<char, std::__1::char_traits<char> >::setbuf(char*, long) in libbotan-2.a(utils_data_src.o)
  "operator new(unsigned long)", referenced from:
      Botan_FFI::ffi_error_exception_thrown(char const*, char const*, int) in libbotan-2.a(ffi.o)
      _botan_hex_encode in libbotan-2.a(ffi.o)
      _botan_hex_decode in libbotan-2.a(ffi.o)
      _botan_base64_encode in libbotan-2.a(ffi.o)
      _botan_base64_decode in libbotan-2.a(ffi.o)
      std::__1::__function::__func<botan_hex_encode::$_0, std::__1::allocator<botan_hex_encode::$_0>, int ()>::__clone() const in libbotan-2.a(ffi.o)
      std::__1::__function::__func<botan_hex_decode::$_1, std::__1::allocator<botan_hex_decode::$_1>, int ()>::__clone() const in libbotan-2.a(ffi.o)
      ...
  "___cxa_allocate_exception", referenced from:
      std::__1::__throw_bad_function_call() in libbotan-2.a(ffi.o)
      Botan::hex_decode(unsigned char*, char const*, unsigned long, unsigned long&, bool) in libbotan-2.a(codec_hex.o)
      Botan::hex_decode(unsigned char*, char const*, unsigned long, bool) in libbotan-2.a(codec_hex.o)
      Botan::base64_decode(unsigned char*, char const*, unsigned long, bool) in libbotan-2.a(codec_base64.o)
      Botan::base64_decode(char const*, unsigned long, bool) in libbotan-2.a(codec_base64.o)
      Botan::(anonymous namespace)::Base64::check_bad_char(unsigned char, char, bool) in libbotan-2.a(codec_base64.o)
      Botan::allocate_memory(unsigned long, unsigned long) in libbotan-2.a(utils_mem_ops.o)
      ...
  "___cxa_begin_catch", referenced from:
      Botan_FFI::ffi_guard_thunk(char const*, std::__1::function<int ()>) in libbotan-2.a(ffi.o)
      ___clang_call_terminate in libbotan-2.a(ffi.o)
      ___clang_call_terminate in libbotan-2.a(codec_hex.o)
      std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> >::overflow(int) in libbotan-2.a(utils_version.o)
      ___clang_call_terminate in libbotan-2.a(utils_version.o)
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in libbotan-2.a(utils_version.o)
      ___clang_call_terminate in libbotan-2.a(codec_base64.o)
      ...
  "___cxa_end_catch", referenced from:
      Botan_FFI::ffi_guard_thunk(char const*, std::__1::function<int ()>) in libbotan-2.a(ffi.o)
      std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> >::overflow(int) in libbotan-2.a(utils_version.o)
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in libbotan-2.a(utils_version.o)
      std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> >::overflow(int) in libbotan-2.a(utils_assert.o)
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in libbotan-2.a(utils_assert.o)
      Botan::OS::read_env_variable_sz(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, unsigned long) in libbotan-2.a(utils_os_utils.o)
      Botan::OS::suppress_echo_on_terminal()::POSIX_Echo_Suppression::~POSIX_Echo_Suppression() in libbotan-2.a(utils_os_utils.o)
      ...
  "___cxa_free_exception", referenced from:
      Botan::hex_decode(unsigned char*, char const*, unsigned long, unsigned long&, bool) in libbotan-2.a(codec_hex.o)
      Botan::hex_decode(unsigned char*, char const*, unsigned long, bool) in libbotan-2.a(codec_hex.o)
      Botan::base64_decode(unsigned char*, char const*, unsigned long, bool) in libbotan-2.a(codec_base64.o)
      Botan::base64_decode(char const*, unsigned long, bool) in libbotan-2.a(codec_base64.o)
      Botan::(anonymous namespace)::Base64::check_bad_char(unsigned char, char, bool) in libbotan-2.a(codec_base64.o)
      Botan::throw_invalid_argument(char const*, char const*, char const*) in libbotan-2.a(utils_assert.o)
      Botan::throw_invalid_state(char const*, char const*, char const*) in libbotan-2.a(utils_assert.o)
      ...
  "___cxa_guard_abort", referenced from:
      Botan::OS::get_cpu_cycle_counter() in libbotan-2.a(utils_os_utils.o)
      Botan::OS::get_high_resolution_clock() in libbotan-2.a(utils_os_utils.o)
      Botan::OS::allocate_locked_pages(unsigned long) in libbotan-2.a(utils_os_utils.o)
      Botan::mlock_allocator::instance() in libbotan-2.a(utils_locking_allocator.o)
      Botan::CPUID::has_simd_32() in libbotan-2.a(utils_cpuid.o)
      Botan::CPUID::to_string() in libbotan-2.a(utils_cpuid.o)
      Botan::CPUID::initialize() in libbotan-2.a(utils_cpuid.o)
      ...
  "___cxa_guard_acquire", referenced from:
      Botan::OS::get_cpu_cycle_counter() in libbotan-2.a(utils_os_utils.o)
      Botan::OS::get_high_resolution_clock() in libbotan-2.a(utils_os_utils.o)
      Botan::OS::allocate_locked_pages(unsigned long) in libbotan-2.a(utils_os_utils.o)
      Botan::mlock_allocator::instance() in libbotan-2.a(utils_locking_allocator.o)
      Botan::CPUID::has_simd_32() in libbotan-2.a(utils_cpuid.o)
      Botan::CPUID::to_string() in libbotan-2.a(utils_cpuid.o)
      Botan::CPUID::initialize() in libbotan-2.a(utils_cpuid.o)
      ...
  "___cxa_guard_release", referenced from:
      Botan::OS::get_cpu_cycle_counter() in libbotan-2.a(utils_os_utils.o)
      Botan::OS::get_high_resolution_clock() in libbotan-2.a(utils_os_utils.o)
      Botan::OS::allocate_locked_pages(unsigned long) in libbotan-2.a(utils_os_utils.o)
      Botan::mlock_allocator::instance() in libbotan-2.a(utils_locking_allocator.o)
      Botan::CPUID::has_simd_32() in libbotan-2.a(utils_cpuid.o)
      Botan::CPUID::to_string() in libbotan-2.a(utils_cpuid.o)
      Botan::CPUID::initialize() in libbotan-2.a(utils_cpuid.o)
      ...
  "___cxa_throw", referenced from:
      std::__1::__throw_bad_function_call() in libbotan-2.a(ffi.o)
      Botan::hex_decode(unsigned char*, char const*, unsigned long, unsigned long&, bool) in libbotan-2.a(codec_hex.o)
      Botan::hex_decode(unsigned char*, char const*, unsigned long, bool) in libbotan-2.a(codec_hex.o)
      Botan::base64_decode(unsigned char*, char const*, unsigned long, bool) in libbotan-2.a(codec_base64.o)
      Botan::base64_decode(char const*, unsigned long, bool) in libbotan-2.a(codec_base64.o)
      Botan::(anonymous namespace)::Base64::check_bad_char(unsigned char, char, bool) in libbotan-2.a(codec_base64.o)
      Botan::allocate_memory(unsigned long, unsigned long) in libbotan-2.a(utils_mem_ops.o)
      ...
  "___gxx_personality_v0", referenced from:
      Botan_FFI::ffi_error_exception_thrown(char const*, char const*, int) in libbotan-2.a(ffi.o)
      Botan_FFI::ffi_guard_thunk(char const*, std::__1::function<int ()>) in libbotan-2.a(ffi.o)
      _botan_hex_encode in libbotan-2.a(ffi.o)
      _botan_hex_decode in libbotan-2.a(ffi.o)
      _botan_base64_encode in libbotan-2.a(ffi.o)
      _botan_base64_decode in libbotan-2.a(ffi.o)
      std::__1::__function::__func<botan_hex_decode::$_1, std::__1::allocator<botan_hex_decode::$_1>, int ()>::operator()() in libbotan-2.a(ffi.o)
      ...
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

System:

  • OS:
    macOS Big Sur 11.4 (20F71)
    
  • which clang:
    /usr/bin/clang
    
  • clang -v:
    Apple clang version 12.0.5 (clang-1205.0.22.9)
    Target: x86_64-apple-darwin20.5.0
    Thread model: posix
    InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
    

KizzyCode avatar Jun 23 '21 16:06 KizzyCode

If (for reasons I don't claim to understand) you insist on linking with a static Botan library, you need to add libc++.dylib (which, like libSystem.B.dylib, does not exist in static form) to resolve references to it.

Taking your source, and trying:

$ sw_vers
ProductName:	macOS
ProductVersion:	11.4
BuildVersion:	20F71
$ clang --version
Apple clang version 12.0.5 (clang-1205.0.22.11)
Target: x86_64-apple-darwin20.5.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
$ 
$ clang $CFLAGS -static -o botan-tst1 -I/opt/local/include/botan-2 botan-tst1.c -L/opt/local/lib -lbotan-2
ld: library not found for -lcrt0.o
clang: error: linker command failed with exit code 1 (use -v to see invocation)
$ clang $CFLAGS -o botan-tst1 -I/opt/local/include/botan-2 botan-tst1.c -L/opt/local/lib -lbotan-2
$ ./botan-tst1
Version: 20210220
$ otool -L botan-tst1
botan-tst1:
	/opt/local/lib/libbotan-2.18.dylib (compatibility version 2018.18.0, current version 2018.18.1)
	/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1292.100.5)
$ 
$ clang $CFLAGS -static -o botan-tst1 -I/opt/local/include/botan-2 botan-tst1.c /opt/local/lib/libbotan-2.a -lc++
ld: library not found for -lcrt0.o
clang: error: linker command failed with exit code 1 (use -v to see invocation)
$ clang $CFLAGS -o botan-tst1 -I/opt/local/include/botan-2 botan-tst1.c /opt/local/lib/libbotan-2.a -lc++
$ ./botan-tst1
Version: 20210220
$ otool -L botan-tst1
botan-tst1:
	/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 905.6.0)
	/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1292.100.5)
$ 
$ 

AFAIK, there's no "truly" static linking on MacOS anymore, and for quite some time:

$ clang -static -o t1 t1.c
ld: library not found for -lcrt0.o
clang: error: linker command failed with exit code 1 (use -v to see invocation)
$ 

you can recognize "Hello World" (cat t1.c):

#include <stdio.h>

int main(int argc, char **argv) {
    printf("Hello, World!\n");
    return 0;
}

mouse07410 avatar Jun 24 '21 01:06 mouse07410

I think you need to either link using clang++ or else link in libc++ explicitly.

BTW if you are using Rust you may be interested in https://crates.io/crates/botan

randombit avatar Jun 24 '21 11:06 randombit

Closing as stale

randombit avatar Mar 25 '23 11:03 randombit