我想在macOS上构建grpc到静态链接库,我的macOS系统是macOS蒙特雷12.6版本(英特尔芯片)。
我发现https://chromium.googlesource.com/external/github.com/grpc/grpc/+/HEAD/BUILDING.md#building-with-cmake构建的共享库是动态链接库,但我希望获得静态链接库。
gcc版本
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 %
我的~/..zshrc配置是
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}"
我已经安装了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 %
然后我使用以下命令:
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 .
当我构建grpc到静态链接库时,当进度达到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 %
如何解决这个错误?请帮帮我。或者如何在macOS上将grpc编译成静态链接库?提前谢谢。
发布于 2022-10-21 02:52:03
这个问题是我自己解决的,答案是在https://github.com/android/ndk/issues/1789
https://stackoverflow.com/questions/74056316
复制相似问题