找出lib是否需要静态或动态运行时

时间:2014-06-24 13:40:13

标签: visual-studio visual-c++ static-libraries

每当您将静态库链接到Visual C ++项目时,您必须确保项目的运行时库的值与用于编译库的值相匹配。例如,如果库是使用静态运行时选项编译的,并且您尝试使用动态运行时编译项目,则链接器将抛出错误。

显然,链接器有一种方法可以确定库是使用静态还是动态运行时编译的。我想知道是否有一个命令行工具可以获取库并可以直接告诉我在创建过程中使用了什么运行时?

1 个答案:

答案 0 :(得分:2)

dumpbin /directives是你的朋友:

C:\jm>type 08.cpp
int main() { }

C:\jm>cl /nologo /c /MT 08.cpp
08.cpp

C:\jm>dumpbin /nologo /directives 08.obj

Dump of file 08.obj

File Type: COFF OBJECT

   Linker Directives
   -----------------
   /DEFAULTLIB:LIBCMT
   /DEFAULTLIB:OLDNAMES

  Summary

          60 .debug$S
          2F .drectve
           7 .text$mn

C:\jm>

请注意"链接器指令下的/DEFAULTLIB:LIBCMT。"使用/MT(静态版本CRT)编译时,此链接器指令将注入到对象中。 /MT/MTd/MD/MDd链接器选项都会导致拖入不同的运行时库。有关详细信息,请参阅the documentation

库只是对象的集合,因此您可以在lib文件上使用dumpbin /directives来获取库中每个对象中包含的指令。请注意,使用不同的运行时库选项编译单个静态库中的不同对象是可能的(尽管非常罕见)。