libcrypto.dylib, building for macOS-arm64 but attempting to link with file built for macOS-x86_64

Jakob Bohm jb-openssl at wisemo.com
Thu Aug 19 13:53:10 UTC 2021


This is a known deficiency of how Apple rushed adding support for their 
M1 ARM Desktop CPU to the XCode build suite.

When building a desktop macOs program file with XCode, it will 
implicitly try to build both an x86_64 and an arm64 variant, and will 
get very surprised your compiled open source library files contain only 
code for one of those architectures.

A potential workaround is to build OpenSSL for all 3 macOs desktop 
architectures and combine them with the "lipo" tool to create a "fat 
library".  The major shortcoming of this is that they use the same 
architecture "key" value for macOs and iOs, but require the libraries to 
be compiled differently (because the ABI for some system functions 
differ).  Before the M1 merge, this would work thanks to arm64 always 
being iOS hardware and x86_64 always being macOs hardware.  A workaround 
for that is to create a separate set of library files for iOS (including 
iOS emulator on x86-family desktops) and macOs (including x86-family and 
arm64 architectures), then being careful to reference the right set for 
each project.  Unfortunately, there is no workaround to use the same set 
of library files for iOS on arm64 mobile hardware and iOS emulator on 
arm64 desktop hardware.

On 2021-08-18 07:40, Stephen Dominic Liang wrote:
> Hi. I installed OpenSSL 1.1 (MacOS 11.3.1) using Homebrew. I added the 
> following to my .bash_profile:
>
> export PKG_CONFIG_PATH="/opt/homebrew/opt/openssl at 1.1/lib/pkgconfig"
>
> I added this to the global path file at /etc/paths:
>
> /opt/homebrew/opt/openssl at 1.1/bin
>
> I've tried a number of other steps. What are some other 
> fixes/suggestions for debugging this issue?
>
> Errors:
>
> |/Applications/CLion.app/Contents/bin/cmake/mac/bin/cmake --build 
> /Users/stephenjje/Documents/Je/test/cmake-build-debug --target test -- 
> -j 6 [ 2%] Linking C executable test ld: warning: ignoring file 
> /usr/local/Cellar/openssl at 1.1/1.1.1k/lib/libcrypto.dylib, building for 
> macOS-arm64 but attempting to link with file built for macOS-x86_64 
> ld: warning: ignoring file 
> /usr/local/Cellar/openssl at 1.1/1.1.1k/lib/libssl.dylib, building for 
> macOS-arm64 but attempting to link with file built for macOS-x86_64 
> Undefined symbols for architecture arm64: "_ERR_print_errors_fp", 
> referenced from: _http_tcpip_inbound_initialize in 
> http_tcpip_inbound.c.o _http_tcpip_inbound_tls_initialize in 
> http_tcpip_inbound.c.o 
> _http_tcpip_outbound_get_url_using_string_type_tls in 
> http_tcpip_outbound.c.o "_OPENSSL_init_crypto", referenced from: 
> _http_tcpip_inbound_tls_initialize in http_tcpip_inbound.c.o 
> "_OPENSSL_init_ssl", referenced from: 
> _http_tcpip_inbound_tls_initialize in http_tcpip_inbound.c.o 
> "_SSL_CIPHER_get_name", referenced from: 
> _http_tcpip_inbound_initialize in http_tcpip_inbound.c.o 
> "_SSL_CTX_free", referenced from: _http_tcpip_inbound_initialize in 
> http_tcpip_inbound.c.o "_SSL_CTX_new", referenced from: 
> _http_tcpip_inbound_tls_initialize in http_tcpip_inbound.c.o 
> _http_tcpip_outbound_get_url_using_string_type_tls in 
> http_tcpip_outbound.c.o "_SSL_CTX_use_PrivateKey_file", referenced 
> from: _http_tcpip_inbound_tls_initialize in http_tcpip_inbound.c.o 
> "_SSL_CTX_use_certificate_file", referenced from: 
> _http_tcpip_inbound_tls_initialize in http_tcpip_inbound.c.o 
> "_SSL_accept", referenced from: _http_tcpip_inbound_initialize in 
> http_tcpip_inbound.c.o "_SSL_connect", referenced from: 
> _http_tcpip_outbound_get_url_using_string_type_tls in 
> http_tcpip_outbound.c.o "_SSL_ctrl", referenced from: 
> _http_tcpip_outbound_get_url_using_string_type_tls in 
> http_tcpip_outbound.c.o "_SSL_free", referenced from: 
> _http_tcpip_inbound_initialize in http_tcpip_inbound.c.o 
> "_SSL_get_current_cipher", referenced from: 
> _http_tcpip_inbound_initialize in http_tcpip_inbound.c.o 
> "_SSL_get_peer_certificate", referenced from: 
> _http_tcpip_outbound_get_url_using_string_type_tls in 
> http_tcpip_outbound.c.o "_SSL_new", referenced from: 
> _http_tcpip_inbound_initialize in http_tcpip_inbound.c.o 
> _http_tcpip_outbound_get_url_using_string_type_tls in 
> http_tcpip_outbound.c.o "_SSL_read", referenced from: 
> _http_tcpip_inbound_parse_request in http_tcpip_inbound.c.o 
> _http_tcpip_outbound_get_url_using_string_type_tls in 
> http_tcpip_outbound.c.o "_SSL_set_fd", referenced from: 
> _http_tcpip_inbound_initialize in http_tcpip_inbound.c.o 
> _http_tcpip_outbound_get_url_using_string_type_tls in 
> http_tcpip_outbound.c.o "_SSL_shutdown", referenced from: 
> _http_tcpip_inbound_initialize in http_tcpip_inbound.c.o "_SSL_write", 
> referenced from: _http_tcpip_inbound_send_response in 
> http_tcpip_inbound.c.o _http_tcpip_outbound_request_send_type_tls in 
> http_tcpip_outbound.c.o "_TLS_client_method", referenced from: 
> _http_tcpip_outbound_get_url_using_string_type_tls in 
> http_tcpip_outbound.c.o "_TLS_server_method", referenced from: 
> _http_tcpip_inbound_tls_initialize in http_tcpip_inbound.c.o 
> "_X509_free", referenced from: 
> _http_tcpip_outbound_get_url_using_string_type_tls in 
> http_tcpip_outbound.c.o ld: symbol(s) not found for architecture arm64 
> clang: error: linker command failed with exit code 1 (use -v to see 
> invocation) gmake[3]: *** [CMakeFiles/test.dir/build.make:680: test] 
> Error 1 gmake[2]: *** [CMakeFiles/Makefile2:83: 
> CMakeFiles/test.dir/all] Error 2 gmake[1]: *** 
> [CMakeFiles/Makefile2:90: CMakeFiles/test.dir/rule] Error 2|

Enjoy

Jakob
-- 
Jakob Bohm, CIO, Partner, WiseMo A/S.  https://www.wisemo.com
Transformervej 29, 2860 Søborg, Denmark.  Direct +45 31 13 16 10
This public discussion message is non-binding and may contain errors.
WiseMo - Remote Service Management for PCs, Phones and Embedded

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mta.openssl.org/pipermail/openssl-users/attachments/20210819/3226d4c2/attachment.html>


More information about the openssl-users mailing list