我写了一些东西来模拟Windows应用程序的getopt.h库,其中一部分是全局变量。当我将程序编译为单个应用程序时,这很好用;然而,当我拆分getopt库并链接它时,我的程序开始得到段错误。研究这一点,似乎从DLL外部访问变量不起作用并返回无效指针;我能做些什么来解决这个问题吗?
编辑:如果我在调试器的DLL中输入一个函数,该变量具有正确的值 - 直接从应用程序获取它会给出不同的值。
答案 0 :(得分:4)
可能发生的事情是您没有正确设置dllexport/dllimport
。结果是你最终得到了同一个变量的不同副本。 (一个在DLL中,一个在外面)
在DLL中,您需要使用dllexport
进行编译,以将变量公开给客户端应用程序。
然后在客户端应用程序中,您需要声明与dllimport
相同的变量。然后它将链接到DLL中的那个。
这有点不幸,因为DLL和客户端通常使用相同的标头。所以通常的解决方法就是:
#ifdef COMPILE_DLL
#define DLL_EXPORT __declspec(dllexport)
#else
#define DLL_EXPORT __declspec(dllimport)
#endif
编辑:
您能否确认您是否拥有同一变量的两个副本?尝试从DLL内部和外部打印出地址。
答案 1 :(得分:3)
考虑向DLL添加一个返回变量值的函数。