首页 > 解决方案 > extern global 似乎会导致链接器错误

问题描述

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

我的设置如下:

// 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文件中声明一个全局,然后以 a 提供定义.cpp是批准的方式创建全局变量,我做错了什么?

附言

我使用以下标志: -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

标签: c++g++extern

解决方案


推荐阅读