解决方案平台配置

有64位,32位,以及Any CPU,Mixed Platforms


解决方案配置

有Debug和Release两个版本

   编译出来的不同版本库是存在兼容性问题的,32位操作系统肯定是不能运行64位可执行程序的,在编译和安装库的时候,这一点要非常注意在下载一个工程项目中,一般情况下,都需要对解决方案中的每一个项目通过属性页面设置七解决方案平台,这一点尤其重要,因为VS主界面上显示的解决方案平台,并不是当前项目的属性,目前在编译kafka的项目中没有设置好解决方案平台的属性,导致编译结果输出到其他的目录下


注意:当编译的时候找不到头文件或者输出结果的文件不对的时候,就需要排查一下是否是解决方案平台设置的不正确,导致在头文件包含和链接选项的输出路径没有设置正确


Debug 和 Release 的真正区别,在于一组编译选项

Debug 版本  
参数       含义  
/MDd /MLd 或 /MTd 使用 Debug runtime library(调试版本的运行时刻函数库)  
/Od 关闭优化开关  
/D "_DEBUG" 相当于 #define _DEBUG,打开编译调试代码开关(主要针对assert函数)  
/ZI  
创建 Edit and continue(编辑继续)数据库,这样在调试过程中如果修改了源代码不需重新编译  
GZ 可以帮助捕获内存错误 
  
Release 版本 参数含义  
/MD /ML 或 /MT 使用发布版本的运行时刻函数库  
/O1 或 /O2 优化开关,使程序最小或最快  
/D "NDEBUG" 关闭条件编译调试代码开关(即不编译assert函数)  
/GF 合并重复的字符串,并将字符串常量放到只读内存,防止被修改 

/GZ 选项:这个选项会做以下这些事: 1.  初始化内存和变量。包括用 0xCC 初始化所有自动变量,0xCD ( Cleared Data ) 初始化堆中分配的内存(即动态分配的内存,例如 new ),0xDD ( Dead Data ) 填充已被释放的堆内存(例如 delete ),0xFD( deFencde Data ) 初始化受保护的内存(debug 版在动态分配内存的前后加入保护内存以防止越界访问),其中括号中的词是微软建议的助记词。这样做的好处是这些值都很大,作为指针是不可能的(而且 32 位系统中指针很少是奇数值,在有些系统中奇数的指针会产生运行时错误),作为数值也很少遇到,而且这些值也很容易辨认,因此这很有利于在 Debug 版中发现 Release 版才会遇到的错误。要特别注意的是,很多人认为编译器会用 0 来初始化变量,这是错误的(而且这样很不利于查找错误)。