Antwort aus geklaut „MetaWINDOW FAQ - OMF vs COFF Object File Formats.htm“
Seit den Anfängen der PC Zivilisation bis etwa zu der Zeit Microsoft Win32-Programmierwerkzeuge kam, fast alle PC-Compiler erzeugten Objektdateien Verwenden des Intel-Objektmodul-Format-Standards (OMF). Später führte Intel 386 Prozessoren und einen 32-Bit-Protected-Modus ein und erweiterte dann die OMF-Spezifikation für 32-Bit, was zu "OMF-386" führte, das zum Standard für die meisten PC-Protected-Mode-Umgebungen wurde. Ungefähr zur gleichen Zeit entwarf das ursprüngliche Windows NT-Entwicklungsteam Code, nicht nur für Intel-Prozessoren, sondern auch für die Unterstützung von Prozessoren anderer Hersteller. Das Microsoft NT-Team ausgewählt, um ein tragbaren Objektmodul-Format als Common Object File Format (COFF) bekannt aus dem Format offiziellen Objekt-Code abgeleitet für UNIX System V COFF Objektmodule später der Defacto-Standard für alle Microsoft Win32-Entwicklungs-Tools wurde, und gewonnen ein Vorteil sein viel näher in Format Portable Executable-Dateien - die native ausführbare Format für Win32 (ein COFF-Format Linker hat viel weniger Arbeit ein 32-Bit-EXE oder DLL aus einer COFF Datei als von einer OMF-Format-Datei zu erstellen).
So wie es OMF- und COFF-Format Objektdateien (OBJ ist), gibt es auch OMF und COFF Format Bibliotheksdateien (LIB ist). Die Bibliotheken sind glücklicherweise im Grunde nur eine Sammlung der Objektdateien, zusammen mit einigen Header-Informationen, mit denen der Linker bestimmen kann, welche Objektdateien aus der Bibliothek zu verwenden sind. aber um die Dinge schwierig, sowohl OMF und COFF den gleichen Dateinamenerweiterungen verwenden, OBJ und LIB, die zwei verschiedenen Arten von Objekten und Bibliotheksdateiformaten zu verweisen (aus diesem Grunde kann man nicht nur auf der Dateinamenerweiterung aussehen um festzustellen, ob das Objektmodul oder die Bibliotheksdatei OMF oder COFF ist).
Das Problem mit dem Mischen von Objektdateien und Bibliotheksdateien von verschiedenen Compiler-Anbietern ist, dass einige Anbieter COFF unterstützen, andere Hersteller OMF verwenden, und einige können beide verarbeiten. Borland zum Beispiel verwendet weiterhin OMF-Objektdateien und -Bibliotheken, während die 32-Bit-Compiler von Microsoft COFF-Formatdateien erzeugen. Watcom C/C++ v11.0 scheint COFF beim Kompilieren und Verknüpfen von Windows-Anwendungen vorzuziehen, generiert jedoch OMF-Objektdateien zur Verwendung mit ihrem DOS4GW 32-Bit-DOS-Extender mit geschütztem Modus. Zusammen mit diesem erzeugt Microsoft MASM 6.13 standardmäßig OMF-Dateien, aber mit dem Schalter/coff können stattdessen COFF-Objektdateien ausgegeben werden.
Wenn es darum geht, Dateien mit verschiedenen Formaten zu verbinden, haben unterschiedliche Linker differnt Dinge. Beispielsweise ist der Microsoft Visual C/C++ - Linker für COFF-Format-Objektdateien und -Bibliotheken konzipiert, versucht jedoch, OMF-Objektdateien bei Bedarf in COFF-Dateien umzuwandeln. Dies funktioniert in einigen Fällen, aber leider unterstützt Microsoft LINK nicht alle OMF-Record-Typen, so dass der Linker in vielen Situationen immer noch fehlschlägt, wenn OMF-Format-Objektdateien übergeben werden. Auch wenn Microsoft LINK versucht, OMF-Objektdateien zu unterstützen, lehnt es die Verarbeitung von OMF-Formatbibliotheken ab.Andere Linker, wie Borlands TLINK, sind für OMF-Objektdateien vorgesehen und verweigern in ähnlicher Weise die Arbeit mit COFF-Format-Objekt- oder Bibliotheksdateien. Einige Hersteller von DOS-Extendern und Embedded-Systemen wie Phar Lap stellen ihre eigenen Linker zur Verfügung, die sowohl OMF als auch COFF unterstützen und Ihnen eine Auswahlmöglichkeit bieten.
Die Quintessenz ist, dass das Mischen von OMF und COFF Objekt und Bibliothek Dateitypen ein Durcheinander sein kann (plus die kryptischen Fehlermeldungen von den Linkern nicht helfen). Sofern Ihr Linker dies nicht ausdrücklich unterstützt, sollten Sie das empfohlene Objekt- und Bibliotheksformat für Ihren Compiler/Linker/Ihre Plattform einhalten und vermeiden, OMF- und COFF-Dateien zu mischen.
Werfen Sie einen Blick auf http://www.iecc.com/linker/linker03.html. – avakar
@avakar: warum nicht diesen Link in eine richtige Antwort gießen? – xtofl