怎样设置VS的编译选项,生成Debug版的静态库(lib)?

各位前辈,我在开发中遇到了这样一个问题:
我手头有一个静态库,有代码,并且分别在debug和release模式下成功编译出了不同版本的lib库文件。我在其它的项目中需要链接这个库,并且Debug版本的程序链接debug版本的静态库,release版本的程序链接release版本的静态库。现在的情况是,release版本的程序生成成功,debug版本的程序提示链接错误:
Logger_D.lib(StaticLogger.obj) : error LNK2038: 检测到“_ITERATOR_DEBUG_LEVEL”的不匹配项: 值“0”不匹配值“2”(dllmain.obj 中)
查看网上的信息,都说是链接的库的debug版本或release版本不匹配,可是我明明是编译并链接了对应版本的静态库啊~
于是一不做二不休,在release版本的程序中链接了debug版的静态库试试——竟然也能成功!这说明我根本就没有成功生成debug版本的静态库!可是将编译选项翻了一遍又一遍,就是找不出原因~
恳请各位前辈指教,到底应该怎样设置编译选项,生成Debug版本的静态库啊?

4个回答

各位前辈,问题解决了~
我用二进制查看器找到lib文件里的_ITERATOR_DEBUG_LEVEL字段,将值手动改为2(0x30改为0x32,一共5处),顺利通过链接。但是原因还是不清楚。
只好手动修改二进制文件了~
激动中~

在你的dll项目中打开项目-属性,检查下编译设置。
编译配置有没有debug release两个项。每个项的设置对不对。
将活动配置修改为debug,有没有输出,输出的是不是debug版的

casinozyz
casinozyz 问题已经解决,谢谢关注!
5 年多之前 回复
casinozyz
casinozyz 所有选项,每个节点都仔细检查过了。我甚至新建了一个工程,对照Debug版静态库的默认设置一项项地检查过了~也确实生成了两个不同版本的lib静态库,大小也不同(Debug静态库的文件名后我加了_D以作区分)。可是还是提示LNK2038~说明debug静态库没有正确生成。纠结两天了~
5 年多之前 回复

_ITERATOR_DEBUG_LEVEL 这个宏到底是哪个编译选项控制的啊?或者在二进制文件里什么地方?都有种直接修改二进制库文件的冲动了。

除了改lib外,楼主找到新的解决办法吗

casinozyz
casinozyz 没有找啊,木有时间找啊~
大约 4 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐