grpc c++ - 共享库与静态库

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

我尝试用两种方式构建 grpc c++。一种带有 -DBUILD_SHARED_LIBS=ON,另一种不带有。

关闭时,进入lib/目录,例如:

360M libgrpc.a

(任何其他库)

当它打开时,我进入lib/目录

lrwxrwxrwx 1 root root   13 Jul  8 11:32 grpc_so/lib/libgrpc.so -> libgrpc.so.41
lrwxrwxrwx 1 root root   17 Jul  8 11:32 grpc_so/lib/libgrpc.so.41 -> libgrpc.so.41.0.0
-rw-r--r-- 1 root rot  58M Jul  8 11:30 grpc_so/lib/libgrpc.so.41.0.0

(以及许多其他 .so 文件)

为什么文库大小差异如此之大?我读到静态库包含其依赖项,但事实上,即使在静态构建中,我也确实在 lib/ 文件夹中看到了 grpc 的其他依赖项(例如 libabsl*.a 文件),所以它不像

libgrpc.a
是自包含的。

所有其他库在静态构建中也具有更大的大小。这些 .a 文件包含哪些 .so 文件不包含的内容?

我正在尝试获得一个小型的、仅运行时的 grpc c++ 版本。不确定我是否应该将其编译为共享库。

c++ shared-libraries grpc static-libraries
1个回答
0
投票

我建议不要在应用程序之外测量库大小。尝试构建您的应用程序,让链接器删除不必要的代码。 Bazel 也可能有助于修剪不必要的代码。

例如在 Linux x86-64 上使用 Bazel 构建欢迎服务器:

bazel build -c opt //examples/cpp/helloworld:greeter_server

生成一个 13M 的可执行文件。通过禁用 xDS 等可能会进一步减少。

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