VS2005中编译dll文件, 出现"共享段无法找到"的错误及解决办法

来源:互联网 发布:java毫秒转换成日期 编辑:程序博客网 时间:2024/04/27 18:09

今天我要做个dll文件,以提供给其它程序使用,按照向导用VS2005创建一个WIN32的DLL文件,在VS2005中,不再要求用.def文件来定义输出函数和共享数据段,而是用__declspec(dllexport)来定义输出函数.用/SECTION来定义共享数据段,好了,闲话不说,我在头文件中加入如下数据段:

#pragma data_seg("LJSec")
HWND volatile g_hWnd=NULL;
#pragma data_seg()
#pragma comment(linker,"/section:LJSec,RWS")

立即忍不住要编译,结果出现一个warning: 说是找不到LJSec的共享数据段.Linker失败,晕,我明明定义了,为何找不到呢?

用dumpbin /section:LJSec xxx.dll 找看这个共享段,结果也没有找到.而这个代码在VC6.0中是绝对不会有问题的.

没有办法,打开项目属性,

Configuration Properties
 --- General
       ----Whole Program Optimization

在Whole Program Optimization选项中,默认是Use Link Time Code Generation,是不是这个优化的问题?我将此条选项改成No Whole Program Optimization,再次编译,编译通过!

只要编译通过了,再改回Use Link Time Code Generation,就不会再出现以前的问题了.

 分析原因可能是由于初次编译,使用Link Time 编码生成的时候由于共享段还没有编译成obj文件,编译器找不到而发生错误.