Невозможно настроить работающий проект GRPC с CmakeC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Невозможно настроить работающий проект GRPC с Cmake

Сообщение Anonymous »

Я пытаюсь создать базовый проект GRPC с использованием Cmake. Я обычно стараюсь избегать Cmake ... не совсем уверен, где проблема. У меня есть Cmake 3.26.5, и система работает за Rocky Linux 9 на Aarch64. У меня установлен следующие вещи: < /p>
# ls /usr/local/lib/cmake/grpc/
gRPCConfig.cmake gRPCPluginTargets-release.cmake gRPCTargets-release.cmake modules
gRPCConfigVersion.cmake gRPCPluginTargets.cmake gRPCTargets.cmake

# ls /usr/local/lib64/cmake/protobuf
protobuf-config-version.cmake protobuf-generate.cmake protobuf-options.cmake protobuf-targets.cmake
protobuf-config.cmake protobuf-module.cmake protobuf-targets-release.cmake
< /code>
Оба из них были установлены, просто проверив свои последние выпуска, скомпилируя и установив их с помощью Cmake. Lib64 против Lib, похоже, не имеет значения, поскольку, если я перемещаю все файлы ProTobuf cmake в LIB или наоборот для GRPC, я все еще получаю те же ошибки.helloworld/
├── CMakeLists.txt
├── proto
│   └── helloworld.proto
└── src
└── server.cpp
< /code>
Файл Cmake, который я имел, был сгенерирован Gemini 2.5: < /p>
cmake_minimum_required(VERSION 3.20)
project(HelloWorldGrpcServer CXX)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

find_package(gRPC REQUIRED)

protobuf_generate(
TARGET helloworld_proto
LANGUAGE cpp
PROTOS proto/helloworld.proto
)

protobuf_generate(
TARGET helloworld_grpc
LANGUAGE grpc
PROTOS proto/helloworld.proto
PLUGIN "protoc-gen-grpc=$"
)

add_executable(hello_server src/server.cpp)

target_include_directories(hello_server
PRIVATE
"${CMAKE_CURRENT_BINARY_DIR}"
)

target_link_libraries(hello_server
PRIVATE
# Link our generated libraries
helloworld_proto
helloworld_grpc
# Link the main gRPC and Protobuf libraries
gRPC::grpc++
Protobuf::libprotobuf
)
< /code>
Я попробовал довольно много изменений в этом, но результаты, кажется, одинаковы. В настоящее время неудача, которую я получаю: < /p>
# cmake ..
-- The CXX compiler identification is GNU 11.5.0
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Success
-- Found Threads: TRUE
CMake Error at CMakeLists.txt:9 (find_package):
Found package configuration file:

/usr/local/lib/cmake/grpc/gRPCConfig.cmake

but it set gRPC_FOUND to FALSE so package "gRPC" is considered to be NOT
FOUND. Reason given by package:

The following imported targets are referenced, but are missing:
protobuf::libprotobuf protobuf::libprotoc

-- Configuring incomplete, errors occurred!
< /code>
Похоже, как загружать пакеты, я пробовал различные комбинации, такие как: < /p>
find_package(Protobuf CONFIG REQUIRED)
find_package(gRPC CONFIG REQUIRED)
< /code>
Но это не удается с: < /p>
CMake Error at /root/protobuf_install/lib64/cmake/protobuf/protobuf-generate.cmake:61 (get_target_property):
get_target_property() called with non-existent target "helloworld_proto".
Call Stack (most recent call first):
CMakeLists.txt:15 (protobuf_generate)

CMake Error at /root/protobuf_install/lib64/cmake/protobuf/protobuf-generate.cmake:163 (target_sources):
Cannot specify sources for target "helloworld_proto" which is not built by
this project.
Call Stack (most recent call first):
CMakeLists.txt:15 (protobuf_generate)

CMake Error at /root/protobuf_install/lib64/cmake/protobuf/protobuf-generate.cmake:55 (message):
Error: protobuf_generate given unknown Language , please provide a value
for GENERATE_EXTENSIONS
Call Stack (most recent call first):
CMakeLists.txt:23 (protobuf_generate)
< /code>
Я ранее использовал Bazel с проектами GRPC, которые используют C ++. Не совсем уверен, с чего даже начать исправлять это. < /P>
Дополнительные файлы: < /p>
syntax = "proto3";

package helloworld;

service Greeter {
rpc SayHello (HelloRequest) returns (HelloReply) {}
}

message HelloRequest {
string name = 1;
}

message HelloReply {
string message = 1;
}
< /code>
и < /p>
#include
#include
#include

#include

#include "helloworld.grpc.pb.h"

using grpc::Server;
using grpc::ServerBuilder;
using grpc::ServerContext;
using grpc::Status;
using helloworld::Greeter;
using helloworld::HelloRequest;
using helloworld::HelloReply;

class GreeterServiceImpl final : public Greeter::Service {
Status SayHello(ServerContext* context, const HelloRequest* request,
HelloReply* reply) override {
std::string prefix("Hello ");
reply->set_message(prefix + request->name());
return Status::OK;
}
};

void RunServer() {
std::string server_address("0.0.0.0:50051");
GreeterServiceImpl service;

ServerBuilder builder;
builder.AddListeningPort(server_address, grpc::insecure_server_credentials());
builder.RegisterService(&service);

std::unique_ptr server(builder.BuildAndStart());

std::cout
# find /usr | grep libproto
/usr/local/lib64/libprotobuf-lite.a
/usr/local/lib64/libprotobuf.a
/usr/local/lib64/libprotoc.a

# which protoc
/usr/local/bin/protoc

# ls -l /usr/local/include/google/
total 4
drwxr-xr-x 7 root root 4096 Jun 10 13:24 protobuf
< /code>
/usr/local/lib64 находится в пути LDConfig. Из моей истории команды я вижу, что я установил Protobuf и Grpc: < /p>
git clone https://github.com/protocolbuffers/protobuf.git -b v31.1 --recurse-submodules
mkdir -p protobuf/build
cd protobuf/build
cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local -DCMAKE_BUILD_TYPE=Release -Dprotobuf_BUILD_TESTS=OFF
make && make install

git clone https://github.com/grpc/grpc -b v1.73.0 --recurse-submodules
mkdir -p grpc/cmake/build
cd grpc/cmake/build
cmake ../.. -DgRPC_INSTALL=ON -DgRPC_BUILD_TESTS=OFF -DCMAKE_CXX_STANDARD=17
make && make install


Подробнее здесь: https://stackoverflow.com/questions/796 ... with-cmake
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»