Проблема: переменная VarOriginal определена в исходном файле C под прагмой скажем «параметр X» и объявлена как переменная extern в заголовочном файле под той же самой прагмой «параметр X». Существует процесс, использующий его, в котором известно, что переменная показана объявленной в каком-то другом заголовочном файле, где эта переменная вообще отсутствует.
В качестве обходного пути: я объявил еще одну другую переменную 'VarNew' перед прагмой 'parameterX' в файле заголовка и аналогично определил переменную 'VarNew' перед строкой, в которой был определен 'VarOriginal'. И все заработало.
Заголовочный файл: header_file_with_problem.h
#ifndef HEADER_FILE_WITH_PROBLEM_H
#define HEADER_FILE_WITH_PROBLEM_H
#include "ABC.h"
здесь объявить переменную VarNew <------ </p>
#pragma BSS(".parameterX")
extern int VarOriginal;
#pragma BSS(DEFAULT_SECTION_BSS)
Исходный файл C:
#define HEADER_FILE_WITH_PROBLEM_C
#include "XYZ.h"
#include "header_file_with_problem.h"
здесь объявить переменную VarNew <------ </p>
#pragma BSS(".parameterX")
int VarOriginal;
#pragma BSS(DEFAULT_SECTION_BSS)
Но я не могу понять, почему проблема возникла раньше. Почему компоновщик не смог найти определение «VarOriginal» в исходном файле, и теперь он может это сделать после объявления другой переменной перед самим «VarOriginal»?
Кроме того, эта проблема связана не со всеми исходными и заголовочными файлами, присутствующими в папке, а только с некоторыми из них.