Wie kann man feststellen, ob eine Bibliothek mit /mt oder /md kompiliert wurde?

Wie kann man feststellen, ob eine Bibliothek mit /mt oder /md kompiliert wurde?

Ja, Sie könnten /DIRECTIVES von dumpbin verwenden Option, um herauszufinden, mit welchen Laufzeitbibliotheken die Objekte in der .lib verknüpft werden sollen:

dumpbin /directives foo.lib

Suchen Sie nach Instanzen der hier angegebenen Laufzeitbibliotheken. Beispielsweise sehen Sie möglicherweise:

/DEFAULTLIB:MSVCRTD (Modul kompiliert mit /MDd)

oder

/DEFAULTLIB:MSVCRT (Modul kompiliert mit /MD)

oder

/DEFAULTLIB:LIBCMT (Modul kompiliert mit /MT)

Es werden wahrscheinlich viele /DEFAULTLIB sein Direktiven, sodass Sie nach Begriffen suchen können wie:

dumpbin /DIRECTIVES foo.lib | find /i "msvcr"

Ein sehr nettes Feature des Microsoft-Compilers ist, dass er die Befehlszeile beibehält, die verwendet wurde, um eine Quelldatei in die .obj-Datei zu kompilieren. Dadurch können Sie es wiederfinden, indem Sie sich die .lib-Datei mit warten ansehen , Notepad.exe. Suchen Sie einfach nach "cl.exe".

Dies sehe ich beispielsweise, wenn ich Notepad verwende, das in einer Beispielbibliothek namens Win32Project1.lib geöffnet ist, die ich mit VS2013 erstellt habe:

Wie Sie sehen können, habe ich mit /MDd

kompiliert

Beachten Sie, dass eine .lib mehrere .obj-Dateien mit möglicherweise unterschiedlichen Einstellungen enthalten kann. Mit der Suche nach "-mt" und "-md" finden Sie es schnell heraus.