GCC 中 -static 和 -static-libstdc++ 的区别

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

-static
还添加了哪些
-static-libstdc++
未添加到最终二进制输出中的内容?

我检查了this问题的优秀答案,但它没有解决我的这个特定问题。

我尝试了以下程序:

#include <iostream>


int main( )
{
    std::cout << "What does -static do that -static-libstdc++ doesn't do?\n";
}

如果没有为链接时指定任何选项,生成的输出仅为 ~17 KB。但是,通过指定

-static-libstdc++
,它会变成 ~1.3 MB。如果使用
-static
来代替,则变为 ~2.4 MB
-static
标志添加了什么导致后两种形式的大小差异如此之大?如果在链接阶段仅指定
-static-libstdc++
,哪些事情会在运行时受到影响?

现在如果有人想构建一个可以在 Ubuntu(v18.04 及更高版本)上运行的小程序,哪一个更合适?

c++ linux gcc static-linking libstdc++
1个回答
1
投票

-static-
意味着
-static-libgcc
-static-libstdc++
以及所有其他库(如果可能的话)静态链接。

您可以使用 ldd 来查看无法获取的内容

Linux 中的依赖解析

$ g++ -static-libstdc++ -static-libgcc test.cpp
$ ldd a.out
        linux-vdso.so.1 (0x00007fff9a7a9000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f5122c90000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f5122fb7000)
$ g++ -static test.cpp
$ ldd a.out
        not a dynamic executable
© www.soinside.com 2019 - 2024. All rights reserved.