Я пытаюсь создать базовый проект 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
Невозможно настроить работающий проект GRPC с Cmake ⇐ C++
Программы на C++. Форум разработчиков
-
Anonymous
1749568514
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
Подробнее здесь: [url]https://stackoverflow.com/questions/79660601/unable-to-setup-a-working-grpc-project-with-cmake[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия