arm机器上使用Qt和grpc构建程序

准备的前提

一定要交叉编译好Qt的源码和grpc的源码。如果不会可以看我的另外的一篇文章,都有讲grpc的交叉编译的过程。由于我们arm上使用的是Linux的系统,我们就使用Cmake来构建我们的项目。

生成需要的文件

protoc -I. --grpc_out=. --plugin=protoc-gen-grpc=/bin/grpc_cpp_plugin logic.proto
protoc -I=. --cpp_out=. logic.proto

--plugin=protoc-gen-grpc=使用绝对路径
生成 *.pb.h, *.pb.cc, *.grpc.pb.h, *.grpc.pb.cc *为文件的名字

配置Cmake

#cmake的版本要求
cmake_minimum_required(VERSION 3.5)
#项目的名称和编译的语言
project(test_cmake LANGUAGES CXX)
#自动包含当前的目录
set(CMAKE_INCLUDE_CURRENT_DIR ON)
#自动查找uic和moc和rcc的程序
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
#设置链接的头文件
#target_include_directories(./include)
#include_directories(./include)
#include_directories($$PWD/include)
#include_directories(../include)
#查找Qt的程模块
find_package(Qt5 COMPONENTS Core Network)

#假设已经安装好grpc了
find_package(Threads REQUIRED)

#查找proto的库
set(protobuf_MODULE_COMPATIBLE TRUE)
find_package(Protobuf CONFIG REQUIRED)
message(STATUS "Using protobuf ${Protobuf_VERSION}")

set(_PROTOBUF_LIBPROTOBUF protobuf::libprotobuf)
set(_REFLECTION gRPC::grpc++_reflection)


# Find gRPC installation
# Looks for gRPCConfig.cmake file installed by gRPC's cmake installation.
find_package(gRPC CONFIG REQUIRED)
message(STATUS "Using gRPC ${gRPC_VERSION}")
set(_GRPC_GRPCPP gRPC::grpc++)

add_executable(test_cmake
  #include/
  main.cpp
  mainwin.h
  mainwin.cpp
  message.h
  message.cpp
  model.h
  model.cpp
  logic.pb.h
  logic.pb.cc
  logic.grpc.pb.h
  logic.grpc.pb.cc
)
target_link_libraries(test_cmake
  Qt5::Core
  Qt5::Network
  ${
    
    _REFLECTION}
  ${
    
    _GRPC_GRPCPP}
  ${
    
    _PROTOBUF_LIBPROTOBUF})

配置交叉编译文件

cat > /tmp/toolchain.cmake <<'EOT'
SET(CMAKE_SYSTEM_NAME Linux)
SET(CMAKE_SYSTEM_PROCESSOR aarch64)
set(CMAKE_STAGING_PREFIX /tmp/stage)
set(CMAKE_C_COMPILER /home/dou/tool/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-gcc)
set(CMAKE_CXX_COMPILER /home/dou/tool/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-g++)
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
EOT

配置编译器的类型--·最好是配置绝对路径

执行cmake

cmake -DCMAKE_TOOLCHAIN_FILE=/tmp/toolchain.cmake \
      -DCMAKE_BUILD_TYPE=Release \
	  -DCMAKE_PREFIX_PATH=/home/dou/qt/qt-everywhere-src-5.14.0/build3/opt/Qt5.14.0/lib/cmake\
      -DCMAKE_INSTALL_PREFIX=./install \
      -Dabsl_DIR=/tmp/stage1/lib/cmake/absl \
      -DProtobuf_DIR=/tmp/stage1/lib/cmake/protobuf \
      -DgRPC_DIR=/tmp/stage1/lib/cmake/grpc \
      ../

-DCMAKE_TOOLCHAIN_FILE:指定交叉编译的工具链
-DCMAKE_BUILD_TYPE:是debug还是release
-DCMAKE_PREFIX_PATH:指定为Qt编译后的路径
-DCMAKE_INSTALL_PREFIX:安装的路径
-Dabsl_DIR,-DProtobuf_DIR,-DgRPC_DIR:为grpc的安装之后的对应的路径
最后一个参数为CMakeLists.txt的路径

最后执行make

make

如果当中有错误,一定要注意自己的软件的版本和grpc还有qt的版本是否是一致的,还有就就是编译的过程是否是选了release

make install

猜你喜欢

转载自blog.csdn.net/simple_core/article/details/127745966
今日推荐