Я не могу вспомнить, какие здесь правила, в моем проекте приложения в настоящее время я объявляю глобальную переменную в stdafx.h / cpp:
extern const char *LOGFILE = "test.log"
Я обнаружил, что библиотека должна знать значение этой переменной. Могу ли я перевести объявление в библиотеку, так как оно не связано до тех пор, пока приложение не будет собрано, не получая ошибок о множественных символах?
Правила таковы: extern
переменная может быть объявленный (нет =...
) столько единиц компиляции, сколько вам нужно (и даже более одного раза в любом из них). Это должно быть определенный (с =...
) ровно один раз во всей программе.
Так что если вы хотите написать библиотеку, которая использует эту переменную, вы можете безопасно объявлять это в любом модуле компиляции библиотеки, которая нуждается в этом: вы сможете скомпилировать объекты библиотеки и сгенерировать саму библиотеку без ошибок. В библиотеке будет неразрешенный символ, который будет разрешен во время компоновки при создании исполняемого файла во время загрузки, если это общая библиотека.
Вы можете написать extern const char *LOGFILE;
(NO = ...
часть) во всех источниках или вставьте в .h и включите его.