我正在研究一个链接到多个二进制文件的静态库。我的目标是减少链接到我的库时的内存占用。
我的图书馆用户需要我在我的图书馆的cpp文件中创建的某些全局对象,然后导出具有这些变量的外部声明的头文件。
问题是,取决于库的使用方式,某些全局变量可能根本无法使用。
以下代码稍微显示了我的代码结构:
Foo.hpp:
class Foo
{
static int sFooListIndex = 0;
static Foo * sFooList[10] = { nullptr };
public:
Foo()
{
if(sFooListIndex < 10)
{
sFooList[sFooListIndex++] = this;
}
}
}
Bar1.hpp:
#include "Foo.hpp"
class Bar1 : public Foo
{
public:
Bar1() : Foo() { }
}
Bar2.hpp:
#include "Foo.hpp"
class Bar2 : public Foo
{
public:
Bar2() : Foo() { }
}
Globals.cpp:
#include "Bar1.hpp”
#include "Bar2.hpp"
static Bar1 bar1;
Foo & foo1 = bar1;
static Bar2 bar2;
Foo & foo2 = bar2;
Export.hpp:
#include "Foo.hpp"
extern Foo & foo1;
extern Foo & foo2;
这是我的问题:
如果包含我的库的项目仅使用foo1,那么foo2是否会从最终的二进制文件中删除?这样,Bar2类的代码也会被剥离吗?
如果不是,您是否知道如何重组代码,以使链接期间未使用的符号和未使用的代码被剥离?我能想到的唯一方法是将Globals.cpp和Export.hpp移到包含我的库的项目中。还有其他方法吗?
我能想到的一种方法是将Globals.hpp和Export.hpp拆分成较小的文件,这些文件具有一起有意义的声明和定义组。那会帮助吗?