【问题标题】:DLL Shared Data Section Does Not Exist ErrorDLL 共享数据段不存在错误
【发布时间】:2012-04-13 04:06:41
【问题描述】:

我尝试在 DLL 中声明一个共享数据段。我用以下方式声明该区域:

#pragma data_seg(".shared")
int varx=0; 
#pragma data_seg()
__declspec(allocate(".shared")) 
// I found this declspec suggestion in another forum
#pragma comment (linker,"/section:.shared,RWS")

我也加了

SECTIONS
            .shared READ WRITE SHARED 

到 def 文件中。但是我总是得到:

LINK : warning LNK4039: section '.shared' specified with /SECTION option does not exist

错误。如果我只做一个(.def 或 pragma 注释)只会得到一个,如果两者都得到两个错误。

有什么我想念的吗?

【问题讨论】:

    标签: c++ dll


    【解决方案1】:

    我只见过这样使用的declspec:

     __declspec(allocate(".shared")) int varx=0;
    

    我会尝试只写这个:

    #pragma comment (linker,"/section:.shared,RWS")
    
     __declspec(allocate(".shared")) int varx=0;
    

    避免声明一个空部分或一个多重定义的部分

    【讨论】:

    • 啊!不分配空间,分配包含的变量太不明智了
    【解决方案2】:

    说清楚:

    data_seg 更改 obj 文件中的默认部分名称,其中初始化为非零变量。因此,如果您设置 varx = 1 此变量出现在 .shared 部分,并将在进程之间共享。在你的情况下,由于 varx = 0,它没有出现在那里。

    改用#pragma 部分并指定在声明变量时要使用的部分:__declspec(allocate(".shared")) int varx = 0。

    不要为您的目的使用 data_seg 关键字。这将允许您不共享任何其他初始化为非零的变量:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-05
      • 2018-06-17
      • 2013-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多