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"
Любой намек, как пройти компиляцию?