引用在依赖应用程序中声明的库中的变量

Reference a variable in a library that's declared in a dependent application

我不记得这里的规则是什么,在我的应用程序项目中,我目前在 stdafx 中声明了一个全局变量。h/cpp:

extern const char *LOGFILE = "test.log"

我发现图书馆需要知道这个变量的值。我可以在库中转发声明它吗,因为它在构建应用程序之前不会链接,而不会出现关于多重定义符号的错误?

规则是:一个 extern 变量可以 声明 (没有 =...)在你需要的任意数量的编译单元中(甚至超过一次在其中任何一个)。它应该在整个程序中被定义(with =...)恰好一次。

所以如果你想写一个使用这个变量的库,你可以安全地在需要它的库的任何编译单元中声明它:你将能够编译库对象并生成库本身没有错误。库中会有一个未解析的符号,如果它是一个共享库,它将在 link 时在加载时构建可执行文件时被解析。

您可以在所有源代码中写入 extern const char *LOGFILE;(没有 = ... 部分),或者放入 .h 并包含它。