casinozyz
casinozyz
采纳率42.9%
2015-01-25 02:15 阅读 9.1k
已采纳

怎样设置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条回答 默认 最新

  • 已采纳
    casinozyz casinozyz 2015-01-25 03:48

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

    点赞 1 评论 复制链接分享
  • caozhy 从今以后生命中的每一秒都属于我爱的人 2015-01-25 02:47

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

    点赞 评论 复制链接分享
  • casinozyz casinozyz 2015-01-25 03:18

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

    点赞 评论 复制链接分享
  • cxw825873709 小威_ 2015-08-19 05:26

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

    点赞 评论 复制链接分享

相关推荐