대답 "MetaWINDOW의 자주 묻는 질문 - OMF는 COFF 개체 파일 Formats.htm 대"시간에 대한 때까지 PC 문명 최대의 새벽부터
마이크로 소프트 Win32 프로그래밍 도구, 함께 생산 된 거의 모든 PC 컴파일러 오브젝트 파일을했다 OMF (Intel Object Module Format) 표준을 사용합니다. 나중에 Intel은 386 개의 프로세서와 32 비트 보호 모드를 도입하여 32 비트 용 OMF 사양을 확장하여 대부분의 PC 보호 모드 환경의 표준이 된 "OMF-386"을 이끌었습니다. 같은시기에 원래 Windows NT 개발 팀은 인텔 프로세서뿐만 아니라 다른 공급 업체의 프로세서도 지원하도록 코드를 설계했습니다. Microsoft NT 팀은 UNIX System V의 공식 개체 코드 형식에서 파생 된 COFF (Common Object File Format)라는 더 이식 가능한 개체 모듈 형식을 선택했습니다. 나중에 COFF 개체 모듈은 모든 Microsoft Win32 개발 도구의 기본 표준이되었으며 Win32 (COFF 형식 링커는 OMF 형식 파일보다 COFF 파일에서 32 비트 EXE 또는 DLL을 만드는 작업이 훨씬 적음)의 실행 가능 형식 인 Portable Executable 파일과 훨씬 더 밀접한 관련이 있습니다.
OMF 및 COFF 형식 개체 파일 (.obj)과 마찬가지로 OMF 및 COFF 형식 라이브러리 파일 (.lib)도 있습니다. 다행스럽게도 라이브러리는 기본적으로 개체 파일의 모음이며 링커가 라이브러리에서 사용할 개체 파일을 결정할 수 있도록 몇 가지 헤더 정보와 함께 제공됩니다. 그러나 OMF와 COFF 모두 동일한 파일 이름 확장자 인 .obj와 .lib를 사용하여 두 가지 유형의 객체 및 라이브러리 파일 형식을 참조합니다 (이 때문에 파일 이름 확장명을 볼 수 없습니다. 개체 모듈 또는 라이브러리 파일이 OMF 또는 COFF인지 확인하는 데 사용됩니다.
다른 컴파일러 공급 업체의 개체 파일과 라이브러리 파일을 혼합 할 때의 문제는 일부 공급 업체가 COFF를 지원하고 다른 공급 업체는 OMF를 사용하며 일부는 둘 다 처리 할 수 있다는 것입니다. 예를 들어 Borland는 OMF 개체 파일과 라이브러리를 사용하는 반면 Microsoft의 32 비트 컴파일러는 COFF 형식 파일을 생성합니다. Watcom C/C++ v11.0은 Windows 응용 프로그램을 컴파일하고 연결할 때 COFF를 선호하지만 DOS4GW 32 비트 보호 모드 DOS 확장기와 함께 사용할 OMF 개체 파일을 생성합니다. 이와 함께 Microsoft MASM 6.13은 기본적으로 OMF 파일을 생성하지만/coff 스위치를 사용하면 COFF 개체 파일을 대신 내보낼 수 있습니다.
다른 형식의 파일을 연결할 때가되면 다른 링커가 다른 작업을 수행합니다. 예를 들어 Microsoft Visual C/C++ 링커는 COFF 형식의 개체 파일과 라이브러리 용으로 설계되었지만 필요한 경우 OMF 개체 파일을 COFF 파일로 변환하려고 시도합니다. 일부 경우에는 작동하지만 불행히도 Microsoft LINK는 모든 OMF 레코드 유형을 지원하지 않으므로 대부분의 경우 OMF 형식의 개체 파일이 제공되면 링커가 계속 실패 할 수 있습니다. 또한 Microsoft LINK는 OMF 개체 파일에 대한 일부 지원을 시도하지만 모든 OMF 형식 라이브러리 처리를 거부합니다.Borland의 TLINK와 같은 다른 링커는 OMF 개체 파일 용으로 설계되었으며 COFF 형식 개체 또는 라이브러리 파일 작업을 거부합니다. Phar Lap과 같은 일부 DOS Extender와 임베디드 시스템 공급 업체는 OMF와 COFF를 모두 지원하는 자체 링커를 제공하므로 선택의 여지가 있습니다.
결론은 OMF 및 COFF 개체와 라이브러리 파일 형식을 혼합하면 엉망이 될 수 있으며 링커의 암호 오류 메시지가 도움이되지 않습니다. 링커가 특별히 지원하지 않는 한 컴파일러/링커/플랫폼에 대한 권장 객체 및 라이브러리 형식을 고수하고 OMF 및 COFF 파일을 혼합하지 않아야합니다.
http://www.iecc.com/linker/linker03.html을보십시오. – avakar
@ avakar : 왜 그 링크를 적절한 답으로 부으십니까? – xtofl