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

本文记录了作者在VS2005中创建DLL文件时遇到的共享数据段问题及解决过程。通过调整项目配置,解决了Linker无法识别共享数据段的警告。

今天我要做个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文件,编译器找不到而发生错误.

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值