UFO ET IT

* .o 파일이란?

ufoet 2020. 12. 29. 07:34
반응형

* .o 파일이란?


나는 자신의 프로젝트를 컴파일하고있다. 그리고 다음 오류로 인해 중단되었습니다.

LINK || 치명적인 오류 LNK1181 : 입력 파일 'obj \ win \ release \ src \ lua \ bindings.o'|

Win7에서 VS 2005/2008 컴파일러로 Code :: Blocks를 사용하여 컴파일. * .o 파일이 누락 된 다른 빈 디렉토리도 많이 있습니다.

그들은 무엇을합니까?


.o로 끝나는 파일은 개체 파일 입니다. 컴파일러는 각 소스 파일을 최종 실행 파일로 연결하기 전에 각 소스 파일에 대한 개체 파일을 만듭니다.


당신은 몇 가지 대답을 얻었고 그들 대부분은 정확하지만 (내 생각에) 아마도 여기서 요점이 무엇인지 놓쳤습니다.

내 생각 엔 실행 파일을 만드는 데 사용하려는 메이크 파일이 있습니다. 익숙하지 않은 경우 makefile은 파일 간의 종속성을 나열합니다. 정말 간단한 경우는 다음과 같을 수 있습니다.

myprogram.exe: myprogram.o
    $(CC) -o myprogram.exe myprogram.o

myprogram.o: myprogram.cpp
    $(CC) -c myprogram.cpp

첫 번째 줄은 그 말씀 myprogram.exe에 따라 달라집니다 myprogram.o. 두 번째 줄은 만드는 방법을 알려줍니다 myprogram.exe 에서 myprogram.o . 세 번째와 네 번째 줄은 각각 myprogram.cpp` 에서 만드는 방법과에 myprogram.o따라 달라집니다 .myprogram.cppmyprogram.o

내 생각 엔 귀하의 경우 gcc 용으로 생성 된 위와 같은 메이크 파일이 있습니다. 문제는 gcc 대신 MS VC와 함께 사용하고 있다는 것입니다. MS VC는 ".o"대신 ".obj"를 개체 파일의 확장자로 사용합니다.

즉, make (또는 귀하의 경우 IDE에 내장 된 동등한 것)가 프로그램을 빌드하려고 할 때 해당 줄을 살펴보고 myprogram.exe. 이를 위해 빌드해야 함을 myprogram.o확인하고 빌드 방법을 알려주는 규칙을 찾습니다 myprogram.o. 그것은 .cpp 파일을 컴파일해야한다고 말하고 있습니다.

그런 일이 분해 - 벤처 캐피탈 ++ 컴파일러가 생성하는 myprogram.obj대신 myprogram.o오브젝트 파일로, 그것은 생산에 다음 단계로 이동하려고 그렇게 할 때 myprogram.exe부터 myprogram.o, 그것은 생성에서의 시도가 있음을 발견 myprogram.o단순히 실패했습니다. 규칙이 말한대로 수행했지만 myprogram.o약속 한대로 생성되지 않았습니다 . 무엇을 해야할지 모르기 때문에 종료되고 오류 메시지가 표시됩니다.

특정 문제 대한 해결책은 아마도 매우 간단 할 것입니다. make 파일을 편집하여 모든 객체 파일의 확장자 .obj.o. 그래도 모든 것을 고칠 지 여부에 대한 많은 의문의 여지가 있습니다. 그게 필요한 전부일 수도 있고, 아니면 다른 (아마도 더 어려운) 문제로 이어질 수도 있습니다.


.o 개체 파일 파일 (Windows의 .obj)에는 파일에 포함 된 함수 및 기타 개체의 이름과 함께 컴파일 된 개체 코드 (즉, C 또는 C ++ 컴파일러에서 생성 된 기계어 코드)가 포함됩니다. 링커 는 개체 파일을 처리 하여 최종 실행 파일을 생성합니다. 빌드 프로세스에서 이러한 파일을 생성하지 않은 경우 makefile / project 파일에 문제가있을 수 있습니다.


객체 파일재배치 가능한 형식의 이진 코드로 어셈블 된다는 점에 유의해야 합니다 . 이것은 링커 가 다른 프로그램과 함께 사용하기 위해 어셈블 된 코드를 메모리에로드 할 수있는 형식입니다 .

레이블을 참조하는 지침에는 .o 파일 에서 이러한 레이블에 할당 된 주소가 아직 없습니다 .

이러한 레이블은 '0'으로 기록되고 어셈블러는 이러한 알 수없는 주소에 대한 재배치 레코드를 만듭니다. 파일이 링크되어 실행 파일로 출력되면 알 수없는 주소가 확인되고 프로그램이 실행될 수 있습니다.

객체 파일 에서 nm 도구를 사용하여 .o 파일에 정의 된 기호를 나열 할 수 있습니다 .


잉크젯이 맞습니다. 보다 구체적으로, .o (.obj) 또는 객체 파일 은 기계 코드로 컴파일 된 단일 소스 파일입니다 ( "기계 코드"가 실행 가능한 기계 코드와 동일하거나 유사한 지 확실하지 않습니다 ). 궁극적으로 실행 가능한 프로그램과 일반 텍스트 소스 파일 사이의 중간입니다.

링커는 o 파일을 사용하여 실행 파일을 어셈블합니다.

Wikipedia에 더 자세한 정보가있을 수 있습니다. 얼마나 많은 정보가 필요하거나 필요한지 잘 모르겠습니다.

참조 URL : https://stackoverflow.com/questions/2186246/what-is-o-file

반응형