кажется, что extern global вызывает ошибки компоновщика - PullRequest
0 голосов
/ 05 февраля 2019

У меня странная ситуация, когда использование глобального объекта может вызвать несвязанные ошибки компоновщика.

Моя настройка выглядит следующим образом:

// 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 является одобренным способом создания глобалов, что я делаю неправильно?

PS

Я использую следующие флаги: -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

...