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

问题描述

怎样设置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版本的静态库啊?

解决方案

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

解决方案二:

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

解决方案三:

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

解决方案四:

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

时间: 2024-12-28 23:36:05

编译器-怎样设置VS的编译选项,生成Debug版的静态库(lib)?的相关文章

微信JS-SDK“分享信息设置”API及数字签名生成方法(NodeJS版本)

原文:微信JS-SDK"分享信息设置"API及数字签名生成方法(NodeJS版本) 先上测试地址以示成功: 用微信打开下面地址测试 http://game.4gshu.com/deep-love/index.html 获直接扫二维码君   用异步ajax的方式获取数字签名 异步的方式好 1.前后端分离啊 2.一个服务可以供多个微信公众帐号的数字签名服务   在服务器端用NodeJS跑起一个数字签名生成服务,web端用ajax方式请求NodeJS服务获取数字签名信息 得到信息后配置微信J

s2013 asp.net 发布网站,设置-配置选项里只有Debug,没有Release ?

问题描述 C#-ASP.NET新建网站 .net4.5.1,完成后发布网站配置文件-新建:随便起个配置文件名连接-发布方法:文件系统,随便选个路径设置-配置:居然只有Debug,为什么没有Release版本选择? 解决方案 解决方案二: 这种奇怪的问题只能说安装没装好啊,正常的默认就是release解决方案三: 引用1楼starfd的回复: 这种奇怪的问题只能说安装没装好啊,正常的默认就是release 可是在新建项目中则有解决方案四: 求神指点,怎么处理?

visual studio-VS 2013的静态库编译,为什么release比debug版本还大?

问题描述 VS 2013的静态库编译,为什么release比debug版本还大? 如题,很奇怪,包括从git下载了开源的项目,里面默认建好的项目也是如此,release比debug的还大?咋回事? 解决方案 一般来说我们总是觉得debug版要大一些,因为它有调试符号.但是也不一定如此,release版可能因为代码优化的关系,产生多个代码路径(比如说,同样的代码,编译器可能产生3份,一份基础版本,一份对intel优化,一份对amd优化,运行的时候选择不同的路径) 或者,对一些函数内联展开,这样也会

c++调用matlab生成的Dll动态连接库

点击打开链接http://download.csdn.net/detail/nuptboyzhb/4228429 c++调用matlab生成的Dll动态连接库 实验平台:   matlab 7.0(R2009a)   VC++6.0思路:1. 设置matlab的编译器,使用外部的VC或者gcc等编译器. 2. 编译m文件成dll 3. 设置VC的Include路径和lib链接库的路径 4. 编写C++调用dll步骤:1.    设置matlab的编译器在命令行窗口下,输入并执行如下命令:mex

Linux下生成使用动态库和静态库

Linux中有两类函数库,动态库和静态库 静态库: 这类库一般都是以.a为后缀名的文件,利用静态库函数编译成的文件比较大,因为整个函数库的所有数据都会被整合进目标代码中. 编译后的执行程序就不需要外部的函数库支持,但也有其缺点,就是一旦静态函数库改变了,那么程序就必须重新编译. 动态库: 这类库的一般都是以.so为后缀名的,相对于静态库函数库来说,动态函数库在编译的时候并没有被编译进目标代码中.当程序执行到相关函数时才调用该函数库里的相应函数,因此动态库函数库所产生的可执行文件比较小,由于函数库

教程-xcode6 封装静态库不能设置暴漏头文件是怎么回事?

问题描述 xcode6 封装静态库不能设置暴漏头文件是怎么回事? 我是按照http://blog.csdn.net/dengbin9009/article/details/34109893这个教程走的,但是 在第三大步的第六小步上不能设置暴漏的头文件是怎么回事?

android linux 静态库的生成和使用

问题描述 android linux 静态库的生成和使用 有个android手机项目,linux3.10,kernel里面有几个文件不想开源出去,想做成静态库一起发布给客户 请问一下怎么将这几个文件做成静态库,做出来后放在哪个目录,再编译整个kernel的时候.mk文件该怎么写 希望能帮忙详细的举个例子,感谢 解决方案 http://blog.chinaunix.net/uid-25885064-id-3066814.html android不太显示,因为手机的cpu型号太多,你不提供源代码,那

makefile把一个 .cpp文件和它所依赖的几个 .a(静态库文件 ) 生成一个动态库文件.so

问题描述 makefile把一个 .cpp文件和它所依赖的几个 .a(静态库文件 ) 生成一个动态库文件.so 假设编译交叉编译工具路径为dir1(arm-linux-androideabi-gcc-4.9 ),存放生成的.so文件的路径为dir2,test.cpp,依赖1.a,2.a,3.a这三个静态文件库,Makefile文件应该怎么写 解决方案 arm-linux-androideabi-gcc-4.9 -fPIC -shared -o dir2/xxx.so test.cpp 1.a 2

malloc,colloc,realloc内存分配,动态库,静态库的生成与调用

 1.在main方法里面直接定义一个非常大的数组的时候,可能会出现栈溢出:错误代码演示: #include<stdio.h> #include<stdlib.h> void main() {     int a[1024 * 1024];     int num = 100;     system("pause"); } 错误截图: 2.在定义数组的时候要定义数组的长度,否则会出现错误.(特例:在GCC编译器下,不会出现错误(因为标准不一样)). 3.打印并