跨DLL的C ++全局变量

Nat*_*ath 2 c++ windows

我写了一些东西来模拟Windows应用程序的getopt.h库,其中一部分是全局变量。当我将程序编译为单个应用程序时,此方法运行良好。但是,当我拆分getopt库并与之链接时,我的程序开始出现segfaults。对此进行调查,似乎无法从DLL外部访问变量,并且返回了无效的指针。有什么我可以解决的吗?

编辑:如果我在调试器的DLL中输入一个函数,则该变量具有正确的值-直接从应用程序访问它会得到不同的值。

Mys*_*ial 5

可能发生的情况是您没有dllexport/dllimport正确设置。结果是您最终将获得同一变量的不同副本。(一个在DLL中,一个在外部)

在DLL中,您需要进行编译dllexport以将变量公开给客户端应用程序。

然后,在客户端应用程序中,您需要声明与相同的变量dllimport。然后它将链接到DLL中的那个。

这有点不幸,因为通常将相同的标头用于DLL和客户端。因此,通常的解决方法是:

#ifdef COMPILE_DLL
#define DLL_EXPORT  __declspec(dllexport)
#else
#define DLL_EXPORT  __declspec(dllimport)
#endif
Run Code Online (Sandbox Code Playgroud)

编辑:

您可以确认是否有两个相同变量的副本吗?尝试从DLL内部和外部打印出地址。