Este README descreve os passos para compilar e executar o servidor C++ e os clientes (C++ e Python) no workspace.
Pré-requisitos (instalar no container de desenvolvimento):
sudo apt-get update
sudo apt-get install -y build-essential cmake pkg-config protobuf-compiler protobuf-compiler-grpc \
libprotobuf-dev libgrpc++-dev python3-pip imagemagick poppler-utils ghostscript- Gerar stubs a partir do .proto
cd /workspaces/grpc-file-processor2
# C++ (server + client)
protoc -I=proto --cpp_out=server_cpp --grpc_out=server_cpp --plugin=protoc-gen-grpc=$(which grpc_cpp_plugin) proto/file_processor.proto
protoc -I=proto --cpp_out=client_cpp --grpc_out=client_cpp --plugin=protoc-gen-grpc=$(which grpc_cpp_plugin) proto/file_processor.proto
# Python (para client_python)
python3 -m pip install grpcio-tools
python3 -m grpc_tools.protoc -I=proto --python_out=client_python --grpc_python_out=client_python proto/file_processor.proto- Compilar e executar o servidor C++
cd /workspaces/grpc-file-processor2/server_cpp
cmake . && make
# Em um terminal separado:
./servercd /workspaces/grpc-file-processor2/server_cpp
LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:/lib/x86_64-linux-gnu ./server
LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:/lib/x86_64-linux-gnu ./server > server.log 2>&1 & echo $! > server.pid tail -f server.log
- Compilar e executar o cliente C++ (em outro terminal)
cd /workspaces/grpc-file-processor2/client_cpp
# Gerar stubs (se ainda não gerou)
protoc -I=../proto --cpp_out=. --grpc_out=. --plugin=protoc-gen-grpc=$(which grpc_cpp_plugin) ../proto/file_processor.proto
cmake . && make
# Observação: neste ambiente o cliente requer usar bibliotecas do sistema.
# Comando que funcionou no workspace:
LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:/lib/x86_64-linux-gnu ./clientObservações: se houver conflito com bibliotecas do Conda (/opt/conda/lib), use uma das alternativas:
# alternativa 1: LD_LIBRARY_PATH (recomendada conforme teste)
LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:/lib/x86_64-linux-gnu ./client
# alternativa 2: forçar libstdc++ do sistema
LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libstdc++.so.6 ./client
# alternativa 3: desativar ambiente conda (se aplicável)
conda deactivate
./client- Executar o cliente Python (em outro terminal)
cd /workspaces/grpc-file-processor2/client_python
python3 -m pip install -r requirements.txt
# Se não foram gerados os stubs na pasta client_python:
python3 -m grpc_tools.protoc -I=../proto --python_out=. --grpc_python_out=. ../proto/file_processor.proto
python3 client.py- Opção Docker (se preferir containerizar)
- Servidor:
docker build -f docker/Dockerfile.server -t grpc-file-server docker
docker run --rm -p 50051:50051 grpc-file-server- Cliente Python (exemplo):
docker build -f docker/Dockerfile.client_python -t grpc-file-client-py docker
# usar --network host no Linux se o servidor estiver no host
docker run --rm --network host grpc-file-client-pySolução para o erro comum de libstdc++ (mensagem tipo "GLIBCXX_3.4.32 not found"):
- O problema é conflito entre /opt/conda/lib (libstdc++.so.6 antiga) e as libs do sistema usadas por grpc/protobuf.
- Solução testada neste workspace: LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:/lib/x86_64-linux-gnu ./client
Logs e diagnóstico:
ldd ./client | grep libstdc++
strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX_3.4.32 || echo "símbolo não encontrado"
LD_DEBUG=libs ./client 2>&1 | grep libstdc++