Extern const char * const SOME_CONSTANT дает мне ошибки компоновщика

Я хочу предоставить строчную константу в API, например:

extern const char* const SOME_CONSTANT;

Но если я определяю его в исходном файле статической библиотеки как

const char* const SOME_CONSTANT = "test";

Я получаю ошибки компоновщика при связывании с этой библиотекой и используя SOME_CONSTANT:

Ошибка 1 ошибка LNK2001: неразрешенный внешний символ "char const * const SOME_CONSTANT" (? SOME_CONSTANT @@3QBDB)

Удаление константы указателя (второе ключевое слово const) из объявления extern const char* const и определения заставляет его работать. Как я могу экспортировать его с константой указателя?

Ответ 1

Проблема может заключаться в том, что объявление extern не отображается в исходном файле, определяющем константу. Попробуйте повторить декларацию выше определения, например:

extern const char* const SOME_CONSTANT;  //make sure name has external linkage
const char* const SOME_CONSTANT = "test";  //define the constant

Ответ 2

Скорее всего, вы забыли включить свой заголовок в свой файл реализации

добавьте ключевое слово extern в определение

без объявления extern он имеет внутреннюю связь и, следовательно, не отображается в компоновщике

Ответ 3

У меня почти такая же проблема. В моем случае у меня почти такая же проблема: я определил в file1.c: static char * const SOME_CONSTANT "test";

в file2.c, а затем в другом исходном файле, я обращаюсь к SOME_CONSTANT, поэтому я определяю его как extern char * const SOME_CONSTANT;

Я получаю следующую ошибку компиляции в: "неопределенная ссылка на 'SOME_CONSTANT"

Любой намек, как пройти компиляцию?