I want to build grpc to static link library on macOS,my macOS system is macOS Monterey version 12.6(Intel chip).
I found https://chromium.googlesource.com/external/github.com/grpc/grpc/+/HEAD/BUILDING.md#building-with-cmake build shared libraries that is Dynamic-link library,but I want to get static-link library.
gcc version is
mindgood@minds-MacBook-Pro lib % gcc --version
Apple clang version 14.0.0 (clang-1400.0.29.102)
Target: x86_64-apple-darwin21.6.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
mindgood@minds-MacBook-Pro lib %
My ~/.zshrc config is
export ANDROID_HOME=/Users/mindgood/Library/Android/sdk
export PATH=$ANDROID_HOME/platform-tools:$PATH
export PATH=$ANDROID_HOME/tools:$PATH
export PATH=$ANDROID_HOME/tools/bin:$PATH
export ANDROID_NDK=/Users/mindgood/Library/Android/sdk/ndk/25.1.8937393
export PATH="/usr/local/opt/openssl@3/bin:$PATH"
export CPATH=/usr/local/opt/openssl@3/include:"${CPATH}"
export PKG_CONFIG_PATH=/usr/local/opt/openssl@3/lib/pkgconfig:"${PKG_CONFIG_PATH}"
export LD_LIBRARY_PATH=/usr/local/opt/openssl@3/lib:"${LD_LIBRARY_PATH}"
I have installed openssl.
mindgood@minds-MacBook-Pro ~ % openssl version
OpenSSL 3.0.5 5 Jul 2022 (Library: OpenSSL 3.0.5 5 Jul 2022)
mindgood@minds-MacBook-Pro ~ % whereis opnessl
opnessl:
mindgood@minds-MacBook-Pro ~ % find / -name 'openssl'
/usr/bin/openssl
find: /usr/sbin/authserver: Permission denied
/usr/local/bin/openssl
/usr/local/include/openssl
/usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Aliases/openssl
/usr/local/opt/openssl
/usr/local/Cellar/openssl@3/3.0.5/bin/openssl
/usr/local/Cellar/openssl@3/3.0.5/include/openssl
/usr/local/Cellar/openssl@3/3.0.5/share/doc/openssl
/usr/local/share/doc/openssl
find: /Library/Application Support/Apple/ParentalControls/Users: Permission denied
find: /Library/Application Support/Apple/AssetCache/Data: Permission denied
find: /Library/Application Support/ApplePushService: Permission denied
find: /Library/Application Support/com.apple.TCC: Operation not permitted
/Library/Developer/CommandLineTools/SDKs/MacOSX11.3.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/openssl
/Library/Developer/CommandLineTools/SDKs/MacOSX12.1.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/openssl
^C
mindgood@minds-MacBook-Pro ~ %
mindgood@minds-MacBook-Pro ~ % cd /usr/local/lib
mindgood@minds-MacBook-Pro lib % ls
engines-1.1 libcrypto.3.dylib libcrypto.dylib libssl.3.dylib libssl.dylib
libcrypto.1.1.dylib libcrypto.a libssl.1.1.dylib libssl.a pkgconfig
mindgood@minds-MacBook-Pro lib %
then I use below command:
git clone --recurse-submodules -b v1.30.0 https://github.com/grpc/grpc
cd grpc
git checkout -b v1.22.x remotes/origin/v1.22.x
cmake ../grpc -DCMAKE_TOOLCHAIN_FILE=${ANDROID_NDK}/build/cmake/android.toolchain.cmake -DgRPC_BUILD_CODEGEN=OFF -DANDROID_ABI=armeabi-v7a -DANDROID_PLATFORM=android-26 -DCMAKE_BUILD_TYPE=Release
cmake --build .
When I build grpc to static link library,An error occurs when the progress reaches 91%:
mindgood@minds-MacBook-Pro grpc % cmake --build .
Consolidate compiler generated dependencies of target address_sorting
[ 0%] Built target address_sorting
Consolidate compiler generated dependencies of target gpr
[ 2%] Built target gpr
Consolidate compiler generated dependencies of target c-ares
[ 5%] Built target c-ares
Consolidate compiler generated dependencies of target zlibstatic
[ 6%] Built target zlibstatic
Consolidate compiler generated dependencies of target grpc
[ 26%] Built target grpc
Consolidate compiler generated dependencies of target grpc_cronet
[ 44%] Built target grpc_cronet
Consolidate compiler generated dependencies of target grpc_unsecure
[ 59%] Built target grpc_unsecure
Consolidate compiler generated dependencies of target libprotobuf
[ 64%] Built target libprotobuf
Consolidate compiler generated dependencies of target grpc++
[ 67%] Built target grpc++
Consolidate compiler generated dependencies of target grpc++_cronet
[ 83%] Built target grpc++_cronet
Consolidate compiler generated dependencies of target grpc++_unsecure
[ 85%] Built target grpc++_unsecure
Consolidate compiler generated dependencies of target libprotoc
[ 90%] Built target libprotoc
Consolidate compiler generated dependencies of target grpc_plugin_support
[ 91%] Built target grpc_plugin_support
Consolidate compiler generated dependencies of target grpc_csharp_ext
[ 91%] Linking CXX shared library libgrpc_csharp_ext.so
ld: error: undefined symbol: X509_STORE_new
>>> referenced by ssl_transport_security.cc:787 (src/core/tsi/ssl_transport_security.cc:787)
>>> ssl_transport_security.cc.o:(tsi_ssl_root_certs_store_create(char const*)) in archive libgrpc.a
ld: error: undefined symbol: X509_STORE_free
>>> referenced by ssl_transport_security.cc:797 (src/core/tsi/ssl_transport_security.cc:797)
>>> ssl_transport_security.cc.o:(tsi_ssl_root_certs_store_create(char const*)) in archive libgrpc.a
>>> referenced by ssl_transport_security.cc:806 (src/core/tsi/ssl_transport_security.cc:806)
>>> ssl_transport_security.cc.o:(tsi_ssl_root_certs_store_destroy(tsi_ssl_root_certs_store*)) in archive libgrpc.a
ld: error: undefined symbol: BIO_new_mem_buf
>>> referenced by ssl_transport_security.cc:593 (src/core/tsi/ssl_transport_security.cc:593)
>>> ssl_transport_security.cc.o:(x509_store_load_certs(x509_store_st*, char const*, unsigned int, stack_st_X509_NAME**)) in archive libgrpc.a
>>> referenced by ssl_transport_security.cc:519 (src/core/tsi/ssl_transport_security.cc:519)
>>> ssl_transport_security.cc.o:(populate_ssl_context(ssl_ctx_st*, tsi_ssl_pem_key_cert_pair const*, char const*)) in archive libgrpc.a
>>> referenced by ssl_transport_security.cc:563 (src/core/tsi/ssl_transport_security.cc:563)
>>> ssl_transport_security.cc.o:(populate_ssl_context(ssl_ctx_st*, tsi_ssl_pem_key_cert_pair const*, char const*)) in archive libgrpc.a
>>> referenced 1 more times
ld: error: undefined symbol: OPENSSL_sk_new_null
>>> referenced by x509.h:77 (/usr/local/opt/openssl@3/include/openssl/x509.h:77)
>>> ssl_transport_security.cc.o:(x509_store_load_certs(x509_store_st*, char const*, unsigned int, stack_st_X509_NAME**)) in archive libgrpc.a
ld: error: undefined symbol: PEM_read_bio_X509_AUX
>>> referenced by ssl_transport_security.cc:602 (src/core/tsi/ssl_transport_security.cc:602)
>>> ssl_transport_security.cc.o:(x509_store_load_certs(x509_store_st*, char const*, unsigned int, stack_st_X509_NAME**)) in archive libgrpc.a
>>> referenced by ssl_transport_security.cc:602 (src/core/tsi/ssl_transport_security.cc:602)
>>> ssl_transport_security.cc.o:(x509_store_load_certs(x509_store_st*, char const*, unsigned int, stack_st_X509_NAME**)) in archive libgrpc.a
>>> referenced by ssl_transport_security.cc:602 (src/core/tsi/ssl_transport_security.cc:602)
>>> ssl_transport_security.cc.o:(x509_store_load_certs(x509_store_st*, char const*, unsigned int, stack_st_X509_NAME**)) in archive libgrpc.a
>>> referenced 2 more times
ld: error: undefined symbol: X509_free
>>> referenced by ssl_transport_security.cc:632 (src/core/tsi/ssl_transport_security.cc:632)
>>> ssl_transport_security.cc.o:(x509_store_load_certs(x509_store_st*, char const*, unsigned int, stack_st_X509_NAME**)) in archive libgrpc.a
>>> referenced by ssl_transport_security.cc:632 (src/core/tsi/ssl_transport_security.cc:632)
>>> ssl_transport_security.cc.o:(x509_store_load_certs(x509_store_st*, char const*, unsigned int, stack_st_X509_NAME**)) in archive libgrpc.a
>>> referenced by ssl_transport_security.cc:641 (src/core/tsi/ssl_transport_security.cc:641)
>>> ssl_transport_security.cc.o:(x509_store_load_certs(x509_store_st*, char const*, unsigned int, stack_st_X509_NAME**)) in archive libgrpc.a
>>> referenced 4 more times
ld: error: undefined symbol: X509_get_subject_name
>>> referenced by ssl_transport_security.cc:608 (src/core/tsi/ssl_transport_security.cc:608)
>>> ssl_transport_security.cc.o:(x509_store_load_certs(x509_store_st*, char const*, unsigned int, stack_st_X509_NAME**)) in archive libgrpc.a
>>> referenced by ssl_transport_security.cc:266 (src/core/tsi/ssl_transport_security.cc:266)
>>> ssl_transport_security.cc.o:(peer_from_x509(x509_st*, int, tsi_peer*)) in archive libgrpc.a
ld: error: undefined symbol: X509_NAME_dup
>>> referenced by ssl_transport_security.cc:614 (src/core/tsi/ssl_transport_security.cc:614)
>>> ssl_transport_security.cc.o:(x509_store_load_certs(x509_store_st*, char const*, unsigned int, stack_st_X509_NAME**)) in archive libgrpc.a
ld: error: undefined symbol: OPENSSL_sk_push
>>> referenced by x509.h:77 (/usr/local/opt/openssl@3/include/openssl/x509.h:77)
>>> ssl_transport_security.cc.o:(x509_store_load_certs(x509_store_st*, char const*, unsigned int, stack_st_X509_NAME**)) in archive libgrpc.a
ld: error: undefined symbol: ERR_clear_error
>>> referenced by ssl_transport_security.cc:622 (src/core/tsi/ssl_transport_security.cc:622)
>>> ssl_transport_security.cc.o:(x509_store_load_certs(x509_store_st*, char const*, unsigned int, stack_st_X509_NAME**)) in archive libgrpc.a
>>> referenced by ssl_transport_security.cc:622 (src/core/tsi/ssl_transport_security.cc:622)
>>> ssl_transport_security.cc.o:(x509_store_load_certs(x509_store_st*, char const*, unsigned int, stack_st_X509_NAME**)) in archive libgrpc.a
>>> referenced by ssl_transport_security.cc:604 (src/core/tsi/ssl_transport_security.cc:604)
>>> ssl_transport_security.cc.o:(x509_store_load_certs(x509_store_st*, char const*, unsigned int, stack_st_X509_NAME**)) in archive libgrpc.a
>>> referenced 2 more times
ld: error: undefined symbol: X509_STORE_add_cert
>>> referenced by ssl_transport_security.cc:623 (src/core/tsi/ssl_transport_security.cc:623)
>>> ssl_transport_security.cc.o:(x509_store_load_certs(x509_store_st*, char const*, unsigned int, stack_st_X509_NAME**)) in archive libgrpc.a
>>> referenced by ssl_transport_security.cc:623 (src/core/tsi/ssl_transport_security.cc:623)
>>> ssl_transport_security.cc.o:(x509_store_load_certs(x509_store_st*, char const*, unsigned int, stack_st_X509_NAME**)) in archive libgrpc.a
ld: error: undefined symbol: ERR_get_error
>>> referenced by ssl_transport_security.cc:624 (src/core/tsi/ssl_transport_security.cc:624)
>>> ssl_transport_security.cc.o:(x509_store_load_certs(x509_store_st*, char const*, unsigned int, stack_st_X509_NAME**)) in archive libgrpc.a
>>> referenced by ssl_transport_security.cc:624 (src/core/tsi/ssl_transport_security.cc:624)
>>> ssl_transport_security.cc.o:(x509_store_load_certs(x509_store_st*, char const*, unsigned int, stack_st_X509_NAME**)) in archive libgrpc.a
>>> referenced by ssl_transport_security.cc:1237 (src/core/tsi/ssl_transport_security.cc:1237)
>>> ssl_transport_security.cc.o:(ssl_handshaker_next(tsi_handshaker*, unsigned char const*, unsigned int, unsigned char const**, unsigned int*, tsi_handshaker_result**, void (*)(tsi_result, void*, unsigned char const*, unsigned int, tsi_handshaker_result*), void*)) in archive libgrpc.a
>>> referenced 2 more times
ld: error: undefined symbol: OPENSSL_sk_pop_free
>>> referenced by x509.h:77 (/usr/local/opt/openssl@3/include/openssl/x509.h:77)
>>> ssl_transport_security.cc.o:(x509_store_load_certs(x509_store_st*, char const*, unsigned int, stack_st_X509_NAME**)) in archive libgrpc.a
>>> referenced by x509v3.h:166 (/usr/local/opt/openssl@3/include/openssl/x509v3.h:166)
>>> ssl_transport_security.cc.o:(peer_from_x509(x509_st*, int, tsi_peer*)) in archive libgrpc.a
ld: error: undefined symbol: BIO_free
>>> referenced by ssl_transport_security.cc:648 (src/core/tsi/ssl_transport_security.cc:648)
>>> ssl_transport_security.cc.o:(x509_store_load_certs(x509_store_st*, char const*, unsigned int, stack_st_X509_NAME**)) in archive libgrpc.a
>>> referenced by ssl_transport_security.cc:0 (src/core/tsi/ssl_transport_security.cc:0)
>>> ssl_transport_security.cc.o:(create_tsi_ssl_handshaker(ssl_ctx_st*, int, char const*, tsi_ssl_handshaker_factory*, tsi_handshaker**)) in archive libgrpc.a
>>> referenced by ssl_transport_security.cc:552 (src/core/tsi/ssl_transport_security.cc:552)
>>> ssl_transport_security.cc.o:(populate_ssl_context(ssl_ctx_st*, tsi_ssl_pem_key_cert_pair const*, char const*)) in archive libgrpc.a
>>> referenced 10 more times
ld: error: undefined symbol: X509_NAME_free
>>> referenced by ssl_transport_security.cc:0 (src/core/tsi/ssl_transport_security.cc:0)
>>> ssl_transport_security.cc.o:(x509_store_load_certs(x509_store_st*, char const*, unsigned int, stack_st_X509_NAME**)) in archive libgrpc.a
ld: error: undefined symbol: SSL_new
>>> referenced by ssl_transport_security.cc:1340 (src/core/tsi/ssl_transport_security.cc:1340)
>>> ssl_transport_security.cc.o:(create_tsi_ssl_handshaker(ssl_ctx_st*, int, char const*, tsi_ssl_handshaker_factory*, tsi_handshaker**)) in archive libgrpc.a
ld: error: undefined symbol: SSL_set_info_callback
>>> referenced by ssl_transport_security.cc:1352 (src/core/tsi/ssl_transport_security.cc:1352)
>>> ssl_transport_security.cc.o:(create_tsi_ssl_handshaker(ssl_ctx_st*, int, char const*, tsi_ssl_handshaker_factory*, tsi_handshaker**)) in archive libgrpc.a
ld: error: undefined symbol: BIO_new_bio_pair
>>> referenced by ssl_transport_security.cc:1354 (src/core/tsi/ssl_transport_security.cc:1354)
>>> ssl_transport_security.cc.o:(create_tsi_ssl_handshaker(ssl_ctx_st*, int, char const*, tsi_ssl_handshaker_factory*, tsi_handshaker**)) in archive libgrpc.a
ld: error: undefined symbol: SSL_set_bio
>>> referenced by ssl_transport_security.cc:1359 (src/core/tsi/ssl_transport_security.cc:1359)
>>> ssl_transport_security.cc.o:(create_tsi_ssl_handshaker(ssl_ctx_st*, int, char const*, tsi_ssl_handshaker_factory*, tsi_handshaker**)) in archive libgrpc.a
ld: error: undefined symbol: SSL_set_connect_state
>>> referenced by ssl_transport_security.cc:1362 (src/core/tsi/ssl_transport_security.cc:1362)
>>> ssl_transport_security.cc.o:(create_tsi_ssl_handshaker(ssl_ctx_st*, int, char const*, tsi_ssl_handshaker_factory*, tsi_handshaker**)) in archive libgrpc.a
ld: error: too many errors emitted, stopping now (use -error-limit=0 to see all errors)
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [libgrpc_csharp_ext.so] Error 1
make[1]: *** [CMakeFiles/grpc_csharp_ext.dir/all] Error 2
make: *** [all] Error 2
mindgood@minds-MacBook-Pro grpc %
How to solve this error? Please help me. Or how to compile grpc to static link library on macOS? Thanks in advance.
This problem solved by myself,the answer is at https://github.com/android/ndk/issues/1789