从静态链接库中删除未引用的全局变量

时间:2014-02-02 03:34:23

标签: c++

我有一个等同于此的全局类:

class CUnref
{
public:
    CUnref() : a(42), b(999)
    {
    }
    virtual ~CUnref()
    {
    }
    int a, b;
};
CUnref Unref;

希望全局变量Unref如果没有被引用,将从最终的可执行文件中删除。

在我的特定情况下,我有一组这样的全局帮助程序,以协助在单独的静态链接库中进行枚举< - >字符串转换。 This stackoverflow的答案似乎表明,在静态链接库的特定情况下,这些未使用的全局实例不应链接在最终的可执行文件中。检查生成的可执行文件显示实例和相关符号仍然存在..

删除虚函数使其从最终的可执行文件中消失(基本上是全局未引用的类POD),但我真的需要继承。我不执行任何副作用(例如分配内存)或其他任何东西,只是继承。

如何确保这些未引用的全局变量(非POD类型但没有副作用)未在最终可执行文件中链接?

编译器是visual studio 2012附带的任何内容。

1 个答案:

答案 0 :(得分:0)

How to prevent VC++ 9 linker from linking unnecessary global variables?

提供的解决方案

在msvc中标记带有__declspec(selectany)的全局变量将使链接器在未被引用的情况下将其删除。