直至前一段时间,我想到一个.静态图书馆只是一个集合.o对象的文件,仅以存档,并未使他们以不同的方式处理。但 连接着一个。o对象,并连接一个.一个静态的图书馆包含这一点。o对象显然是不一样的.我不明白为什么...

让我们考虑以下来源码文件:

// main.cpp
#include <iostream>
int main(int argc, char* argv[]) {
    std::cout << "main" << std::endl;
}

// object.hpp
#include <iostream>
struct Object
{
    Object() { std::cout << "Object constructor called" << std::endl; }
    ~Object() { std::cout << "Object destructor called" << std::endl; }
};

// object.cpp
#include "object.hpp"
static Object gObject;

让我们编译和 链接 和运行这个代号:

g++ -Wall object.cpp main.cpp -o main1
./main1
> Object constructor called
> main
> Object destructor called

构造一个析构的全球gObject对象。

现在让我们来创建一个 静态图书馆 从我们的代码和使用(链接),它在另一个程序:

g++ -Wall -c object.cpp main.cpp
ar rcs lib.a object.o
g++ -Wall -o main2 main.o lib.a
./main2
> main
  • gObject的constructor and destructor不叫...为什么?
  • 如何让他们自动打的电话?

谢谢。

有帮助吗?

解决方案

.a 静态图书馆包含几个 .o 但他们没有联系,除非你参考它们的主要应用程序。
.o 文件的独立链接。

所以 .o 文件在连接总是往里走,引用或不,但是从 .a 文件唯一引用的 .o 目文件是相互关联的。

作为一个说明,静态的全球对象不需要已经被初始化了,直到你真正的参考任何东西,在编制单元,大多数编纂者将其初始化的所有他们之前,主要的,但是唯一的要求是,他们获得初始化之前的任何功能编制单元得到执行。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top