grpc 示例 helloworld 二进制文件在 linux 中太大

问题描述 投票:0回答:1

我在我的 ubuntu 22.04 上安装了 grpc 然后我构建示例。 我打电话给以下:

/usr/bin/cmake ../ -DCMAKE_BUILD_TYPE:STRING=MinSizeRel -G "Unix Makefiles"

和构建:

/usr/bin/cmake --build /home/user/grpc/examples/cpp/helloworld/build --target all -j 8

最后,我在构建文件夹中得到了基本客户端-服务器示例的编译二进制文件。 它们每个的大小都大于 37MB。 这是什么原因?

如果我将 CMADE_BUILD_TYPE 更改为 Release,没有区别 - 大小仍然是 37MB 如果我更改为调试,大小超过 40(没关系)。

为什么基本 grpc 示例程序的 Release 版本体积如此庞大?

我开始这项调查是因为我自己的项目也有同样的问题(没有 grps 的大小是 10MB,有 grpc 的大小是 45MB)。

这是来自 helloworld 的 cmakelists 文件

cmake_minimum_required(VERSION 3.5.1)

project(HelloWorld C CXX)

include(../cmake/common.cmake)

# Proto file
get_filename_component(hw_proto "../../protos/helloworld.proto" ABSOLUTE)
get_filename_component(hw_proto_path "${hw_proto}" PATH)

# Generated sources
set(hw_proto_srcs "${CMAKE_CURRENT_BINARY_DIR}/helloworld.pb.cc")
set(hw_proto_hdrs "${CMAKE_CURRENT_BINARY_DIR}/helloworld.pb.h")
set(hw_grpc_srcs "${CMAKE_CURRENT_BINARY_DIR}/helloworld.grpc.pb.cc")
set(hw_grpc_hdrs "${CMAKE_CURRENT_BINARY_DIR}/helloworld.grpc.pb.h")
add_custom_command(
      OUTPUT "${hw_proto_srcs}" "${hw_proto_hdrs}" "${hw_grpc_srcs}" "${hw_grpc_hdrs}"
      COMMAND ${_PROTOBUF_PROTOC}
      ARGS --grpc_out "${CMAKE_CURRENT_BINARY_DIR}"
        --cpp_out "${CMAKE_CURRENT_BINARY_DIR}"
        -I "${hw_proto_path}"
        --plugin=protoc-gen-grpc="${_GRPC_CPP_PLUGIN_EXECUTABLE}"
        "${hw_proto}"
      DEPENDS "${hw_proto}")

# Include generated *.pb.h files
include_directories("${CMAKE_CURRENT_BINARY_DIR}")

# hw_grpc_proto
add_library(hw_grpc_proto
  ${hw_grpc_srcs}
  ${hw_grpc_hdrs}
  ${hw_proto_srcs}
  ${hw_proto_hdrs})
target_link_libraries(hw_grpc_proto
  ${_REFLECTION}
  ${_GRPC_GRPCPP}
  ${_PROTOBUF_LIBPROTOBUF})

# Targets greeter_[async_](client|server)
foreach(_target
  greeter_client greeter_server 
  greeter_callback_client greeter_callback_server 
  greeter_async_client greeter_async_client2 greeter_async_server)
  add_executable(${_target} "${_target}.cc")
  target_link_libraries(${_target}
    hw_grpc_proto
    ${_REFLECTION}
    ${_GRPC_GRPCPP}
    ${_PROTOBUF_LIBPROTOBUF})
endforeach()

更新。 我的projectg是跨平台的,源码是一样的。 在 Windows 下,我静态链接。 exe 文件大小小 10 倍,为 4.5MB。 因此,对 Linux 二进制文件的质疑变得更加困难。有什么办法可以减少吗?

c++ grpc-c++
1个回答
0
投票

看起来我能够最小化二进制文件的大小

  1. 在构建 grpc 时使用
    -DCMAKE_BUILD_TYPE=MinSizeRel
  2. 在构建示例或自己的项目时使用相同的方法。
  3. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -s")
    剥离最终的二进制文件

结果 - 大小为 8MB。

© www.soinside.com 2019 - 2024. All rights reserved.