我写了一些东西来模拟Windows应用程序的getopt.h库,其中一部分是全局变量。当我将程序编译为单个应用程序时,此方法运行良好。但是,当我拆分getopt库并与之链接时,我的程序开始出现segfaults。对此进行调查,似乎无法从DLL外部访问变量,并且返回了无效的指针。有什么我可以解决的吗?
编辑:如果我在调试器的DLL中输入一个函数,则该变量具有正确的值-直接从应用程序访问它会得到不同的值。
可能发生的情况是您没有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内部和外部打印出地址。