首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在macOS上构建grpc到静态链接库

如何在macOS上构建grpc到静态链接库
EN

Stack Overflow用户
提问于 2022-10-13 13:07:55
回答 1查看 182关注 0票数 0

我想在macOS上构建grpc到静态链接库,我的macOS系统是macOS蒙特雷12.6版本(英特尔芯片)。

我发现https://chromium.googlesource.com/external/github.com/grpc/grpc/+/HEAD/BUILDING.md#building-with-cmake构建的共享库是动态链接库,但我希望获得静态链接库。

gcc版本

代码语言:javascript
运行
复制
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配置是

代码语言:javascript
运行
复制
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。

代码语言:javascript
运行
复制
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 % 

然后我使用以下命令:

代码语言:javascript
运行
复制
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%时会发生错误:

代码语言:javascript
运行
复制
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编译成静态链接库?提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-21 02:52:03

这个问题是我自己解决的,答案是在https://github.com/android/ndk/issues/1789

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74056316

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档