相关疑难解决方法(0)

使用g ++不会发生静态初始化和破坏静态库的全局变量

直到前一段时间,我认为.a静态库只是.o目标文件的集合,只是归档它们而不是以不同的方式处理它们.但是链接到.o对象并链接到包含此.o对象的.a静态库显然是不一样的.我不明白为什么......

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

// main.cpp
#include <iostream>
int main(int argc, char* argv[]) {
    std::cout << "main" << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
// object.hpp
#include <iostream>
struct Object
{
    Object() { std::cout << "Object constructor called" << std::endl; }
    ~Object() { std::cout << "Object destructor called" << std::endl; }
};
Run Code Online (Sandbox Code Playgroud)
// object.cpp
#include "object.hpp"
static Object gObject;
Run Code Online (Sandbox Code Playgroud)

让我们编译并链接并运行以下代码:

g++ -Wall object.cpp main.cpp -o main1
./main1
> Object constructor called
> main
> Object destructor called
Run Code Online (Sandbox Code Playgroud)

构造函数是全局gObject对象的析构函数.

现在让我们从代码中创建一个静态库,并在另一个程序中使用(链接)它:

g++ …
Run Code Online (Sandbox Code Playgroud)

c++ linker g++ global-variables static-libraries

22
推荐指数
1
解决办法
8740
查看次数

标签 统计

c++ ×1

g++ ×1

global-variables ×1

linker ×1

static-libraries ×1