Today, I followed Build from Source to compile gRPC on ArchLinux
:
$ git clone -b $(curl -L https://grpc.io/release) https://github.com/grpc/grpc
$ cd grpc
$ git submodule update --init
$ make
Current gRPC
‘s release version is v1.4.x
:
$ curl -L https://grpc.io/release
v1.4.x
The build flow will generate the errors like this:
......
src/core/lib/support/murmur_hash.c: In function ‘gpr_murmur_hash3’:
src/core/lib/support/murmur_hash.c:79:10: error: this statement may fall through [-Werror=implicit-fallthrough=]
k1 ^= ((uint32_t)tail[2]) << 16;
~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/core/lib/support/murmur_hash.c:80:5: note: here
case 2:
^~~~
src/core/lib/support/murmur_hash.c:81:10: error: this statement may fall through [-Werror=implicit-fallthrough=]
k1 ^= ((uint32_t)tail[1]) << 8;
~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
src/core/lib/support/murmur_hash.c:82:5: note: here
case 1:
^~~~
cc1: all warnings being treated as errors
......
After referring Fix warnings with GCC 7, I finally make the compilation successful. To facilitate others to build gRPC v1.4.x
source code on ArchLinux
, I create a patch, and hope it can help others.
P.S.
(1) You should fallback to OpenSSL 1.0
. Please refer here:
PKG_CONFIG_PATH=/usr/lib/openssl-1.0/pkgconfig make
Otherwise you may encounter following errors:
src/core/tsi/ssl_transport_security.c: In function ‘tsi_create_ssl_client_handshaker_factory’:
src/core/tsi/ssl_transport_security.c:1281:3: error: ‘TLSv1_2_method’ is deprecated [-Werror=deprecated-declarations]
ssl_context = SSL_CTX_new(TLSv1_2_method());
^~~~~~~~~~~
In file included from /usr/include/openssl/ct.h:13:0,
from /usr/include/openssl/ssl.h:61,
from src/core/tsi/ssl_transport_security.c:45:
/usr/include/openssl/ssl.h:1624:1: note: declared here
DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_2_method(void)) /* TLSv1.2 */
^
src/core/tsi/ssl_transport_security.c: In function ‘tsi_create_ssl_server_handshaker_factory_ex’:
src/core/tsi/ssl_transport_security.c:1389:7: error: ‘TLSv1_2_method’ is deprecated [-Werror=deprecated-declarations]
impl->ssl_contexts[i] = SSL_CTX_new(TLSv1_2_method());
^~~~
In file included from /usr/include/openssl/ct.h:13:0,
from /usr/include/openssl/ssl.h:61,
from src/core/tsi/ssl_transport_security.c:45:
/usr/include/openssl/ssl.h:1624:1: note: declared here
DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_2_method(void)) /* TLSv1.2 */
^
At top level:
src/core/tsi/ssl_transport_security.c:118:22: error: ‘openssl_thread_id_cb’ defined but not used [-Werror=unused-functio ]
static unsigned long openssl_thread_id_cb(void) {
^~~~~~~~~~~~~~~~~~~~
src/core/tsi/ssl_transport_security.c:110:13: error: ‘openssl_locking_cb’ defined but not used [-Werror=unused-function]
static void openssl_locking_cb(int mode, int type, const char *file, int line) {
^~~~~~~~~~~~~~~~~~
cc1: all warnings being treated as errors
(2) You may need to change installation directory from /usr/local
to /usr
:
make prefix=/usr install
This lets you process pkg-config
path easily.