Статическая компиляция сервиса GRPC C ++ - PullRequest
0 голосов
/ 15 апреля 2019

Я пытаюсь развернуть GRPC-сервер C ++ на докере.К сожалению, примеры grpc используют динамически связанные библиотеки GRPC.При копировании исполняемых файлов в докер (например, небольшой альпийский) он отвечает "не найдено".Основная проблема заключается в том, что исполняемый файл зависит от динамически связанных библиотек GRPC.

Я обновил пример Makefile из GRPC до [только изменение добавляет -static]

HOST_SYSTEM = $(shell uname | cut -f 1 -d_)
SYSTEM ?= $(HOST_SYSTEM)
CXX = g++
CPPFLAGS += `pkg-config --cflags protobuf grpc`
CXXFLAGS += -std=c++11
ifeq ($(SYSTEM),Darwin)
LDFLAGS += -L/usr/local/lib `pkg-config --libs protobuf grpc++ grpc`\
        -lgrpc++_reflection\
        -ldl
else
LDFLAGS += -L/usr/local/lib `pkg-config --libs protobuf grpc++ grpc`\
        -Wl,--no-as-needed -lgrpc++_reflection -Wl,--as-needed\
        -ldl
endif
PROTOC = protoc
GRPC_CPP_PLUGIN = grpc_cpp_plugin
GRPC_CPP_PLUGIN_PATH ?= `which $(GRPC_CPP_PLUGIN)`

PROTOS_PATH = ../../protos

vpath %.proto $(PROTOS_PATH)

all: system-check greeter_client greeter_server greeter_async_client greeter_async_client2 greeter_async_server

greeter_client: helloworld.pb.o helloworld.grpc.pb.o greeter_client.o
    $(CXX) $^ $(LDFLAGS) -o $@ -static

Однако это приводит к

Using 'getaddrinfo' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/usr/local/lib/libgrpc.a(message_compress.o):(.text+0x43d): undefined reference to `deflateInit2_'
/usr/local/lib/libgrpc.a(message_compress.o):(.text+0x44e): undefined reference to `deflate'
/usr/local/lib/libgrpc.a(message_compress.o):(.text+0x4bb): undefined reference to `deflateEnd'
/usr/local/lib/libgrpc.a(message_compress.o):(.text+0x5bc): undefined reference to `inflateInit2_'
/usr/local/lib/libgrpc.a(message_compress.o):(.text+0x5cb): undefined reference to `inflate'
/usr/local/lib/libgrpc.a(message_compress.o):(.text+0x63b): undefined reference to `inflateEnd'

Как настроить это, чтобы получить работающий статически скомпилированный клиент / сервер GRPC?

...