Hi,
I’m trying to compile Dovecot 2.3.15 on a Intel Mac with Big Sur and Xcode 12.5.1 with command line. I’ve compiled openSSL -1.1.1k in its own directory and pointed dovecot to use that directory. I’m getting undefined symbols during the linking (see below). I’ve been trying to figure out what’s missing but not having any luck
Here’s the configure:
CPPFLAGS="-I/Library/MWSrvrSrvcs/openssl/include" LDFLAGS="-L/Library/MWSrvrSrvcs/openssl/lib" ./configure --prefix=/Library/MWSrvrSrvcs/dovecot --with-ssl=openssl --with-gnu-ld --with-pgsql=auto --with-mysql=auto --with-sqlite=auto --with-gssapi=yes --with-ldap=auto --with-solr=no --with-libwrap=auto --with-ioloop=no --with-bzlib --with-zlib --with-notify=no --without-shared-libs --sysconfdir=/Library/MWSrvrSrvcs/Mail/Config --datadir=/Library/MWSrvrSrvcs/Mail/Data
Here’s where it errors out:
/bin/sh ../../libtool --tag=CC --mode=link gcc -std=gnu99 -g -O2 -fstack-protector-strong -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -Wall -W -Wmissing-prototypes -Wmissing-declarations -Wpointer-arith -Wchar-subscripts -Wformat=2 -Wbad-function-cast -Wno-duplicate-decl-specifier -Wstrict-aliasing=2 -module -avoid-version -L/Library/MWSrvrSrvcs/openssl/lib -o libssl_iostream_openssl.la -rpath /Library/MWSrvrSrvcs/dovecot/lib/dovecot dovecot-openssl-common.lo iostream-openssl.lo iostream-openssl-common.lo iostream-openssl-context.lo istream-openssl.lo ostream-openssl.lo -lssl -lcrypto
libtool: link: gcc -o .libs/libssl_iostream_openssl.so -bundle .libs/dovecot-openssl-common.o .libs/iostream-openssl.o .libs/iostream-openssl-common.o .libs/iostream-openssl-context.o .libs/istream-openssl.o .libs/ostream-openssl.o -L/Library/MWSrvrSrvcs/openssl/lib -lssl -lcrypto -g -O2 -fstack-protector-strong
Undefined symbols for architecture x86_64:
"_buffer_append", referenced from:
_openssl_iostream_error in iostream-openssl-common.o
_o_stream_ssl_sendv in ostream-openssl.o
"_buffer_create_dynamic", referenced from:
_o_stream_ssl_sendv in ostream-openssl.o
"_buffer_delete", referenced from:
_o_stream_ssl_flush_buffer in ostream-openssl.o
"_buffer_free", referenced from:
_o_stream_ssl_destroy in ostream-openssl.o
"_buffer_get_writable_size", referenced from:
_o_stream_ssl_sendv in ostream-openssl.o
_o_stream_ssl_get_buffer_avail_size in ostream-openssl.o
"_default_pool", referenced from:
_openssl_iostream_set_error in iostream-openssl.o
_openssl_iostream_bio_sync in iostream-openssl.o
_openssl_iostream_handle_error in iostream-openssl.o
_openssl_iostream_create in iostream-openssl.o
_openssl_iostream_handshake in iostream-openssl.o
_openssl_iostream_set_log_prefix in iostream-openssl.o
_openssl_iostream_free in iostream-openssl.o
...
"_i_debug", referenced from:
_openssl_iostream_set_error in iostream-openssl.o
_openssl_iostream_handle_error in iostream-openssl.o
_openssl_iostream_handshake in iostream-openssl.o
_openssl_info_callback in iostream-openssl.o
_openssl_iostream_verify_client_cert in iostream-openssl.o
_ssl_iostream_context_init_common in iostream-openssl-context.o
_ssl_servername_callback in iostream-openssl-context.o
...
"_i_error", referenced from:
_openssl_iostream_bio_sync in iostream-openssl.o
_ssl_tmp_dh_callback in iostream-openssl-context.o
"_i_fatal", referenced from:
_ssl_iostream_openssl_init in iostream-openssl.o
_ssl_iostream_context_init_common in iostream-openssl-context.o
_ssl_ctx_use_certificate_chain in iostream-openssl-context.o
"_i_fatal_status", referenced from:
_dovecot_openssl_malloc in dovecot-openssl-common.o
_dovecot_openssl_realloc in dovecot-openssl-common.o
_openssl_iostream_error in iostream-openssl-common.o
"_i_info", referenced from:
_openssl_iostream_verify_client_cert in iostream-openssl.o
"_i_panic", referenced from:
_dovecot_openssl_common_global_unref in dovecot-openssl-common.o
_openssl_iostream_shutdown in iostream-openssl.o
_openssl_iostream_bio_sync in iostream-openssl.o
_openssl_iostream_handle_error in iostream-openssl.o
_openssl_iostream_create in iostream-openssl.o
_openssl_iostream_unref in iostream-openssl.o
_openssl_iostream_handshake in iostream-openssl.o
...
"_i_strdup", referenced from:
_openssl_iostream_set_error in iostream-openssl.o
_openssl_iostream_bio_sync in iostream-openssl.o
_openssl_iostream_handle_error in iostream-openssl.o
_openssl_iostream_create in iostream-openssl.o
_openssl_iostream_handshake in iostream-openssl.o
_openssl_iostream_set_log_prefix in iostream-openssl.o
_openssl_iostream_verify_client_cert in iostream-openssl.o
...
"_i_strdup_printf", referenced from:
_openssl_iostream_create in iostream-openssl.o
"_i_stream_alloc", referenced from:
_i_stream_ssl_read in istream-openssl.o
"_i_stream_close", referenced from:
_openssl_iostream_shutdown in iostream-openssl.o
_openssl_iostream_handshake in iostream-openssl.o
_i_stream_ssl_close in istream-openssl.o
"_i_stream_create", referenced from:
_openssl_i_stream_create_ssl in istream-openssl.o
(maybe you meant: _openssl_i_stream_create_ssl)
"_i_stream_free_buffer", referenced from:
_i_stream_ssl_destroy in istream-openssl.o
"_i_stream_get_data", referenced from:
_openssl_iostream_bio_sync in iostream-openssl.o
"_i_stream_get_data_size", referenced from:
_openssl_iostream_bio_sync in iostream-openssl.o
_i_stream_ssl_read in istream-openssl.o
"_i_stream_get_error", referenced from:
_openssl_iostream_bio_sync in iostream-openssl.o
"_i_stream_get_fd", referenced from:
_openssl_i_stream_create_ssl in istream-openssl.o
"_i_stream_get_name", referenced from:
_openssl_iostream_create in iostream-openssl.o
"_i_stream_get_root_io", referenced from:
_openssl_iostream_create in iostream-openssl.o
"_i_stream_read_data", referenced from:
_openssl_iostream_bio_sync in iostream-openssl.o
"_i_stream_ref", referenced from:
_openssl_o_stream_create_ssl in ostream-openssl.o
"_i_stream_set_input_pending", referenced from:
_openssl_iostream_bio_sync in iostream-openssl.o
"_i_stream_set_name", referenced from:
_openssl_iostream_create in iostream-openssl.o
"_i_stream_skip", referenced from:
_openssl_iostream_bio_sync in iostream-openssl.o
"_i_stream_try_alloc", referenced from:
_i_stream_ssl_read in istream-openssl.o
"_i_stream_unref", referenced from:
_openssl_iostream_free in iostream-openssl.o
_o_stream_ssl_destroy in ostream-openssl.o
"_i_strocpy", referenced from:
_pem_password_callback in iostream-openssl-context.o
"_io_stream_set_error", referenced from:
_i_stream_ssl_read in istream-openssl.o
_o_stream_ssl_flush in ostream-openssl.o
_o_stream_ssl_flush_buffer in ostream-openssl.o
"_iostream_ssl_module_init", referenced from:
_ssl_iostream_openssl_init in iostream-openssl.o
"_o_stream_close", referenced from:
_openssl_iostream_shutdown in iostream-openssl.o
_openssl_iostream_handshake in iostream-openssl.o
_o_stream_ssl_close in ostream-openssl.o
"_o_stream_cork", referenced from:
_openssl_iostream_bio_sync in iostream-openssl.o
"_o_stream_create", referenced from:
_openssl_o_stream_create_ssl in ostream-openssl.o
(maybe you meant: _openssl_o_stream_create_ssl)
"_o_stream_flush", referenced from:
_openssl_iostream_shutdown in iostream-openssl.o
_openssl_iostream_handshake in iostream-openssl.o
_plain_flush_callback in ostream-openssl.o
"_o_stream_get_buffer_avail_size", referenced from:
_openssl_iostream_bio_sync in iostream-openssl.o
"_o_stream_get_buffer_used_size", referenced from:
_o_stream_ssl_flush in ostream-openssl.o
_o_stream_ssl_get_buffer_used_size in ostream-openssl.o
"_o_stream_get_error", referenced from:
_openssl_iostream_bio_sync in iostream-openssl.o
"_o_stream_get_fd", referenced from:
_openssl_o_stream_create_ssl in ostream-openssl.o
"_o_stream_get_name", referenced from:
_openssl_iostream_create in iostream-openssl.o
"_o_stream_ref", referenced from:
_plain_flush_callback in ostream-openssl.o
"_o_stream_send", referenced from:
_openssl_iostream_bio_sync in iostream-openssl.o
"_o_stream_set_flush_callback", referenced from:
_openssl_o_stream_create_ssl in ostream-openssl.o
"_o_stream_set_flush_pending", referenced from:
_openssl_iostream_bio_sync in iostream-openssl.o
_o_stream_ssl_sendv in ostream-openssl.o
_o_stream_ssl_flush in ostream-openssl.o
_o_stream_ssl_flush_pending in ostream-openssl.o
_plain_flush_callback in ostream-openssl.o
"_o_stream_set_max_buffer_size", referenced from:
_o_stream_ssl_set_max_buffer_size in ostream-openssl.o
"_o_stream_set_name", referenced from:
_openssl_iostream_create in iostream-openssl.o
"_o_stream_set_no_error_handling", referenced from:
_openssl_iostream_create in iostream-openssl.o
"_o_stream_switch_ioloop_to", referenced from:
_o_stream_ssl_switch_ioloop_to in ostream-openssl.o
"_o_stream_uncork", referenced from:
_openssl_iostream_bio_sync in iostream-openssl.o
_openssl_iostream_create in iostream-openssl.o
"_o_stream_unref", referenced from:
_openssl_iostream_free in iostream-openssl.o
_plain_flush_callback in ostream-openssl.o
"_pool_alloconly_create", referenced from:
_ssl_iostream_context_init_common in iostream-openssl-context.o
"_safe_memset", referenced from:
_openssl_iostream_load_key in iostream-openssl-context.o
"_ssl_iostream_check_cert_validity", referenced from:
_openssl_iostream_handshake in iostream-openssl.o
"_ssl_iostream_context_ref", referenced from:
_openssl_iostream_create in iostream-openssl.o
_openssl_iostream_change_context in iostream-openssl.o
"_ssl_iostream_context_unref", referenced from:
_openssl_iostream_change_context in iostream-openssl.o
_openssl_iostream_free in iostream-openssl.o
_openssl_iostream_context_init_client in iostream-openssl-context.o
_openssl_iostream_context_init_server in iostream-openssl-context.o
"_ssl_iostream_handshake", referenced from:
_openssl_iostream_shutdown in iostream-openssl.o
_openssl_iostream_more in iostream-openssl.o
"_ssl_iostream_has_valid_client_cert", referenced from:
_openssl_iostream_cert_match_name in iostream-openssl.o
_openssl_iostream_get_peer_name in iostream-openssl.o
"_ssl_iostream_settings_init_from", referenced from:
_ssl_iostream_context_init_common in iostream-openssl-context.o
"_ssl_iostream_unref", referenced from:
_openssl_iostream_destroy in iostream-openssl.o
_i_stream_ssl_destroy in istream-openssl.o
_o_stream_ssl_destroy in ostream-openssl.o
"_str_c", referenced from:
_openssl_iostream_error in iostream-openssl-common.o
"_str_printfa", referenced from:
_openssl_iostream_error in iostream-openssl-common.o
"_t_malloc0", referenced from:
_openssl_iostream_get_peer_name in iostream-openssl.o
_openssl_iostream_error in iostream-openssl-common.o
"_t_str_new", referenced from:
_openssl_iostream_error in iostream-openssl-common.o
"_t_strconcat", referenced from:
_openssl_iostream_create in iostream-openssl.o
"_t_strdup_noconst", referenced from:
_openssl_iostream_use_certificate in iostream-openssl.o
_openssl_iostream_load_key in iostream-openssl-context.o
_ssl_iostream_context_init_common in iostream-openssl-context.o
_ssl_ctx_use_certificate_chain in iostream-openssl-context.o
"_t_strdup_printf", referenced from:
_dovecot_openssl_common_global_set_engine in dovecot-openssl-common.o
_openssl_iostream_handle_error in iostream-openssl.o
_openssl_iostream_create in iostream-openssl.o
_openssl_iostream_get_security_string in iostream-openssl.o
_openssl_iostream_use_certificate in iostream-openssl.o
_openssl_iostream_verify_client_cert in iostream-openssl.o
_openssl_cert_match_name in iostream-openssl-common.o
...
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[3]: *** [libssl_iostream_openssl.la] Error 1
make[2]: *** [all-recursive] Error 1
make[1]: *** [all-recursive] Error 1
make: *** [all] Error 2
Thanks
Mitch