确定lib文件是否为2010版本 我们将C++源从VS2008迁移到VS 2010。由于lib文件不正确,我们遇到问题

确定lib文件是否为2010版本 我们将C++源从VS2008迁移到VS 2010。由于lib文件不正确,我们遇到问题,c++,visual-studio-2010,visual-studio-2008,visual-c++,C++,Visual Studio 2010,Visual Studio 2008,Visual C++,是否有任何方法可以确定lib文件是使用VS2010还是VS2008生成的 严格地说,您将无法直接从lib文件中获取它,因为这些文件只是.obj文件的容器(或者在导入库的情况下是“伪对象文件”)。有可能有一个包含由不同编译器创建的对象文件的库,尽管我怀疑您是否会经常看到它 但是,您可以将信息从库中包含的对象文件中导出 我不知道这些信息有多可靠,但MSVC生成的对象文件似乎包含用于构建它们的编译器的版本信息。目标文件包含名为“.debug$S”的节,该节将包含调试信息。但是,即使您构建了没有调试信息

是否有任何方法可以确定lib文件是使用VS2010还是VS2008生成的

严格地说,您将无法直接从lib文件中获取它,因为这些文件只是.obj文件的容器(或者在导入库的情况下是“伪对象文件”)。有可能有一个包含由不同编译器创建的对象文件的库,尽管我怀疑您是否会经常看到它

但是,您可以将信息从库中包含的对象文件中导出

我不知道这些信息有多可靠,但MSVC生成的对象文件似乎包含用于构建它们的编译器的版本信息。目标文件包含名为“.debug$S”的节,该节将包含调试信息。但是,即使您构建了没有调试信息的对象文件,仍然会有一个小的“.debug$S”部分,对于使用VS 2008 SP1(编译器版本15.00.30729.01)编译的简单“hello world”程序,该部分可能如下所示:

您会注意到,该字符串在“.debug$S”部分的偏移量0x30和0x38处显示了两次

对于VS 2010 SP1(编译器版本16.00.40219.01),生成以下“.debug$S”:

原始数据#2
00000000:04 00 00 00 F1 00 00 00 00 56 00 00 00 18 00 01 11…ñ…V。。。。。。。
00000010:00 00 00 43 3A 5C 74 65 6D 70 5C 68 65 6C 6C…C:\temp\hell

00000020:6F 2E 6F 62 6A 00 3A 00 3C 11 00 22 00 07 00 o.obj.:.MSDN的页面提到了一个标记,用于从库中提取信息的
DUMPBIN
工具,也许通过这个工具你可以找到版本号或其他一些区别信息。在库的内容上,不同的编译器版本中使用不同的名称修饰。
RAW DATA #2
  00000000: 04 00 00 00 F1 00 00 00 56 00 00 00 18 00 01 11  ....ñ...V.......
  00000010: 00 00 00 00 63 3A 5C 74 65 6D 70 5C 68 65 6C 6C  ....c:\temp\hell
  00000020: 6F 2E 6F 62 6A 00 3A 00 3C 11 00 22 00 00 07 00  o.obj.:.<.."....
  00000030: 0F 00 00 00 09 78 01 00 0F 00 00 00 09 78 01 00  .....x.......x..
  00000040: 4D 69 63 72 6F 73 6F 66 74 20 28 52 29 20 4F 70  Microsoft (R) Op
  00000050: 74 69 6D 69 7A 69 6E 67 20 43 6F 6D 70 69 6C 65  timizing Compile
  00000060: 72 00 00 00                                      r...
0f 00 00 00 09 78 01 00
RAW DATA #2
  00000000: 04 00 00 00 F1 00 00 00 56 00 00 00 18 00 01 11  ....ñ...V.......
  00000010: 00 00 00 00 43 3A 5C 74 65 6D 70 5C 68 65 6C 6C  ....C:\temp\hell
  00000020: 6F 2E 6F 62 6A 00 3A 00 3C 11 00 22 00 00 07 00  o.obj.:.<.."....
  00000030: 10 00 00 00 1B 9D 01 00 10 00 00 00 1B 9D 01 00  ................
  00000040: 4D 69 63 72 6F 73 6F 66 74 20 28 52 29 20 4F 70  Microsoft (R) Op
  00000050: 74 69 6D 69 7A 69 6E 67 20 43 6F 6D 70 69 6C 65  timizing Compile
  00000060: 72 00 00 00                                      r...