我在我的 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 二进制文件的质疑变得更加困难。有什么办法可以减少吗?
看起来我能够最小化二进制文件的大小
-DCMAKE_BUILD_TYPE=MinSizeRel
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -s")
剥离最终的二进制文件结果 - 大小为 8MB。