https://msdn.microsoft.com/en-us/library/vstudio/b0084kay.aspx
Evaluates to an integer literal that encodes the major and minor number components of the compiler‘s version number. The major number is the first component of the period-delimited version number and the minor number is the second component.
For example, if the version number of the Visual C++ compiler is 17.00.51106.1, the _MSC_VER macro evaluates to 1700. Type cl /? at the command line to view the compiler‘s version number.
http://zhidao.baidu.com/link?url=-3Tt0whWtZprWu2x8g2hCePEKiaKPpcROJ87Vlq6z9qUIfUhtwJGrbip57d0A8vSg2ROzTxgadMfstAHAkw5hK
http://blog.csdn.net/u012818231/article/details/16990661
同学问到一个问题,没有明白问题的原因。多方查找资料后,发现是程序使用的库与开发环境版本问题。
程序用vs2010编译时,出现错误。
[cpp] view plaincopy
- 错误 1 error C1189: #error : "Wrong Compiler. This library does only run with Visual C++ 7.1 and Visual C++ 6. Newer versions are currently not supported."
打开此文件,部分代码如下:
[cpp] view plaincopy
- #if !defined _MSC_VER
- #error "Wrong Compiler. This library does only run with Visual C++ 7.1 and Visual C++ 6. To suppress this Error, uncomment this line."
- #else
- #if _MSC_VER < 1200
- // older then VC6, too old to use library.
- #error "Wrong Compiler. This library does only run with Visual C++ 7.1 and Visual C++ 6. Older compiler versions are not supported."
- #elif _MSC_VER == 1200
- // VC6
- #elif _MSC_VER == 1300
- // VC70 not supported
- #error "Wrong Compiler. This library does only run with Visual C++ 7.1 and Visual C++ 6. VC7.0 is not supported."
- #elif _MSC_VER == 1310
- // VC71
- #elif _MSC_VER == 1400
- // VC80
- #elif _MSC_VER == 1500
- // VC90
- #else
- #error "Wrong Compiler. This library does only run with Visual C++ 7.1 and Visual C++ 6. Newer versions are currently not supported."
- // other maybe newer compiler ...
- #endif
- #endif
然后,查了下_MSC_VER,原来是用来定义编译器的版本。
[cpp] view plaincopy
- MS VC++10.0 _MSC_VER=1600(VS2010)
- MS VC++9.0 _MSC_VER=1500(VS2008)
- MS VC++8.0 _MSC_VER=1400(VS2005)
- MS VC++7.0 _MSC_VER=1300
- MS VC++7.1 _MSC_VER=1310
- MS VC++6.0 _MSC_VER=1200
在程序中加入_MSC_VER宏可以根据编译器版本让编译器选择行的编译一段程序。例如一个版本编译器产生的lib文件可能不能被另一个版本的编译器调用,那么在开发应用程序的时候,在该程序的lib调用库中放入多个版本编译器产生的lib文件。[1]
此实例就是这个问题,文件中的代码:
[cpp] view plaincopy
- #if !defined UDSHL_LIB_NO_LINK
- #if (!defined _MSC_VER || _MSC_VER >= 1500) // vc80 compiler, and other here
- #pragma warning( disable : 4996) // Disable deprecated warnings.
- #if defined _DEBUG
- #pragma comment ( lib, UDSHL_LIB_DIR "IAT_UDSHL07_vc9d.lib" )
- #else
- #pragma comment ( lib, UDSHL_LIB_DIR "IAT_UDSHL07_vc9.lib" )
- #endif
- #elif (!defined _MSC_VER || _MSC_VER >= 1400) // vc80 compiler, and other here
- #pragma warning( disable : 4996) // Disable deprecated warnings.
- #if defined _DEBUG
- #pragma comment ( lib, UDSHL_LIB_DIR "IAT_UDSHL07_vc8d.lib" )
- #else
- #pragma comment ( lib, UDSHL_LIB_DIR "IAT_UDSHL07_vc8.lib" )
- #endif
- #elif (!defined _MSC_VER || _MSC_VER >= 1300) // vc71 compiler, and other here
- #if defined _DEBUG
- #pragma comment ( lib, UDSHL_LIB_DIR "IAT_UDSHL07_vc71d.lib" )
- #else
- #pragma comment ( lib, UDSHL_LIB_DIR "IAT_UDSHL07_vc71.lib" )
- #endif
- #else
- #if defined _DEBUG
- #pragma comment ( lib, UDSHL_LIB_DIR "IAT_UDSHL07_vc6d.lib" )
- #else
- #pragma comment ( lib, UDSHL_LIB_DIR "IAT_UDSHL07_vc6.lib" )
- #endif
- #endif
根据不同的版本选择对应的库(IAT_UDSHL07_vc**.lib)文件。还分为debug和release版。
问题是,如果我只安装了vs2010该怎么运行呢?
更改工程的属性->平台工具集,选择v90后,提示
[cpp] view plaincopy
- 错误 1 error MSB8010: 指定的平台工具集(v90)需要 Visual Studio 2008。请确保在计算机上安装 Visual Studio 2008。
[1]. _MSC_VER.http://baike.so.com/doc/515910.html