静态链接对库实际上做了什么?

Sal*_*gar 4 c c++ linker static-linking

假设我有一个名为库的库libfoo,其中包含一个类,一些静态变量,可能是"C"链接,还有一些其他函数.

现在我有一个主程序,看起来像这样:

int main() {
   return 5+5;
}
Run Code Online (Sandbox Code Playgroud)

当我编译并链接这个时,我链接反对libfoo.

这会有什么影响吗?我的可执行文件会增加吗?如果是这样,为什么?静态变量或其地址是否被复制到我的可执行文件中?

如果对此有类似的问题,或者我以任何方式特别愚蠢,请道歉.

Mat*_*hen 6

它不会在现代链接器中执行任何操作,因为它知道可执行文件实际上并不使用libfoo的符号.在我的系统上使用gcc 4.4.1和ld 2.20:

g++ linker_test.cpp -static -liberty -lm -lz -lXp -lXpm -o linker_test_unnecessary
g++ linker_test.cpp -static -o linker_test_none
ls -l linker_test_unnecessary linker_test_none 
Run Code Online (Sandbox Code Playgroud)

它们都是626094字节.请注意,这也适用于动态链接,尽管它们的大小都要低得多.