extern global似乎导致链接器错误

时间:2019-02-04 23:58:34

标签: c++ g++ extern

我遇到一种奇怪的情况,即使用全局对象似乎会导致不相关的链接器错误。

我的设置如下:

// globals.h
#ifndef GLOBALS_H
#define GLOBALS_H

class Singleton
{
...
};

extern Singleton* g_object;
#endif

// globals.cpp

#include "globals.h"

Singleton* g_object = new Singleton();

// somefile.cpp

#include "globals.h"

void function()
{
    g_object->do_some_stuff();
}

当我尝试在某处使用g_object时,看起来从链接器获得了很多“未定义的引用”,但它们都引用了项目的其他一些不相关的部分,与我的课程或对象或使用它的函数。

我感觉好像缺少了一些明显的东西,并且以某种方式弄乱了对象,但据我所知,我无法弄清楚在.h文件中声明一个全局变量然后提供.cpp中的定义是创建全局变量的公认方法,我在做什么错了?

P.S。

我使用以下标志: -c -v -Wall -Wno-strict-aliasing -Weffc++ -Woverloaded-virtual -Wshadow -Wuninitialized -fstack-protector -fshort-wchar -fvisibility=hidden -fms-extensions -xc++ -fno-strict-aliasing -std=c++11 -fpermissive -Wno-narrowing -pthread -g -fPI

0 个答案:

没有答案