最近將編程環(huán)境升級(jí)到VS2008,結(jié)果很多原來(lái)正常編譯的projects都出現(xiàn)了編譯告警和錯(cuò)誤。花了一周多時(shí)間熟悉下VS2008.,總體來(lái)看vs2008在64位編程、多核/多處理器編譯、函數(shù)的安全性、c++模板的支持方面都有很多改進(jìn)。但是在升遷到新的環(huán)境之前也有很多問題需要重新考慮了。
1。time_t在vs2003中默認(rèn)是32位__time32_t,現(xiàn)在默認(rèn)為__time_64_t了,如果要繼續(xù)兼任原有代碼必須在頭文件的開始處增加如下語(yǔ)句
#ifndef _USE_32BIT_TIME_T
#define _USE_32BIT_TIME_T//use __time32_t
#endif
2.sprintf,memcpy之類的函數(shù)都會(huì)提示告警,要繼續(xù)使用這些函數(shù)必須在定義宏
#define _CRT_SECURE_NO_DEPRECATE
#define _CRT_SECURE_NO_WARNINGS
3.編譯時(shí)出現(xiàn):無(wú)法打開vc90.pdb的錯(cuò)誤。在MSDN上搜索了一下,解決辦法是
http://msdn.microsoft.com/en-us/library/hk8k8k4h(VS.80).aspx原文貼在這里,主要是因?yàn)関s2008支持一在個(gè)solutions下多個(gè)不相互依賴的project的并行編譯,當(dāng)然前提是你的cpu是多核的或者有多個(gè)cpu。如果多個(gè)projects的output目錄相同就會(huì)碰到同時(shí)寫入vc90.pdb的問題。知道了原因就很好解決了。
Title: You may receive a "PRJ0008" or "C2471" or "C1083" or "D8022" or "LNK1103" or similar error message when you try to build a solution in Visual C++
Symptoms:
- D8022 : Cannot open 'RSP00000215921192.rsp'
- PRJ0008 : Could not delete file 'vc90.idb'.
- C1083 : Cannot open program database file 'vc90.pdb'
- C2471 : Cannot update program database 'vc90.pdb'
- LNK1103 : debugging information corrupt.
Cause:
This problem occurs when all of the following conditions are true:
- You have a solution with more than one project in it.
- Two or more of the projects are not dependent on each other.
- You have parallel builds enabled. (Tools -> Options: Projects and Solutions, Build and Run: "maximum number of parallel project builds" is set to a value greater than 1)
- You are building on a system with multiple CPUs (cores).
- Two or more of the non-dependent projects are configured to use the same Intermediate and/or Output directory.
- A specific race condition in mspdbsrv.exe remains uncorrected.
Resolution:
To resolve the problem do one or more of the following:
- Reconfigure the non-dependent projects to specify an Intermediate and Output directory that is different from one another, e.g. Output Directory = "$(SolutionDir)$(ProjectName)\$(ConfigurationName)", Intermediate Directory = "$(OutDir)".
- Adjust your solution's project dependencies (Project -> Project Dependencies...) so that each is dependent on another.
- Disable parallel builds.
- Add the "/onecpu" boot option to your boot.ini file.
- Change you BIOS settings to enable/use only one CPU.
- File a problem report with Microsoft Technical Support and keep bugging the *** out of them until they eventually fix mspdbsrv.