У меня есть файлы, которые связаны между собой:
basic.h
#pragma once
extern const string APPLICATION_NAME;
application.cpp
#include "basic.h"
const string APPLICATION_NAME = "MyApplication";
............
ErrorTables.h
class ErrorTable
{
public:
ErrorTable();
private:
map <index, errorRecord> _errorTable;
};
ErrorTables.cpp
#include "basic.h"
ErrorTable TheErrorTable;
ErrorTable::ErrorTable()
{
...
_errorTable[errorIndex] = errorRecord(APPLICATION_NAME + " hit some error.");
...
}
Этот код можно построить и запустить нормально в Visual Studio.
Когда я использую GCC, он может быть собран, но не выполнен во время выполнения.
Проблема в TheErrorTable, который имеет статическую связь и
создан до запуска main (); он не может разрешить переменную APPLICATION_NAME.
Если я скрываю это используя локальную переменную, все работает хорошо.
Есть ли флаг GCC, который вызывает разрешение статической переменной во время сборки или
реализует поведение Visual Studio другим способом?