-static-libstdc ++ GCC标志是否影响Linux上静态库(* .a)的生成

时间:2014-03-16 05:31:47

标签: c++ gcc static

问题来自以下情况:

有一个静态c ++库 A 和一个可执行文件 B ,它链接到 A 。我希望 B 独立于c ++运行时。

我知道使用MSVC,如果使用/MD标志编译 A ,那么B肯定会依赖于msvc * .dll。

但我很困惑-static-libstdc++是否在Linux上扮演GCC角色。

我的问题是在Linux上使用GCC,我在编译 A 时是否需要使用-static-libstdc++,或者它只是一个链接器标志而不影响 A 根本。

提前致谢。

1 个答案:

答案 0 :(得分:0)

我相信答案是肯定的(但还没试过)。

原因是代码访问动态库中的符号与静态符号(可执行文件中的符号)不同。在您的情况下,这是库A.

对于静态符号,在链接可执行文件时将这些符号解析为内存地址。事实上,符号的名称根本不必保存在可执行文件中(这称为"剥离"可执行文件)。

对于动态库中的符号,必须显示符号的名称,并且可执行文件中的代码访问它们以加载符号(可能使用dlopendlsym等函数。 / p>