Что такое *.o файл?

Я компилирую собственный проект. И остановленный этой ошибкой:

ССЫЛКА || фатальная ошибка LNK1181: не может открыть входной файл 'obj\win\release\src\lua\bindings.o' |

Компиляция использующего Кода:: Блоки с VS 2005/2008 компилятор под win7. Существует также партия другого пустые каталоги, где *.o файлы отсутствуют.

Что они делают?

57
задан Max Frai 2 February 2010 в 17:37
поделиться

4 ответа

Файл, заканчивающийся на .o, является объектным файлом . Компилятор создает объектный файл для каждого исходного файла перед их объединением в окончательный исполняемый файл.

83
ответ дан 24 November 2019 в 19:27
поделиться

Объектный файл .o (также .obj на Windows) содержит скомпилированный объектный код (т.е. машинный код, созданный вашим компилятором C или C++), а также имена функций и других объектов, содержащихся в файле. Объектные файлы обрабатываются компоновщиком для получения конечного исполняемого файла. Если в процессе сборки эти файлы не были созданы, вероятно, что-то не так с вашими makefile/project файлами.

5
ответ дан 24 November 2019 в 19:27
поделиться

Ink-Jet прав. Точнее, .o (.obj) -- или объектный файл - это единый исходный файл, скомпилированный в машинный код (Я не уверен, является ли "машинный код" таким же или похожим на исполняемый машинный код). В конечном счете, это промежуточное звено между исполняемой программой и простым текстовым исходным файлом.

Линкер использует o-файлы для сборки исполняемого файла.

Википедия может иметь более подробную информацию. Я не уверен, сколько информации вам нужно или нужно.

0
ответ дан 24 November 2019 в 19:27
поделиться

Вы получили несколько ответов, и большинство из них правильные, но упустите то, что (я думаю), вероятно, является здесь главным.

Я предполагаю, что у вас есть make-файл, который вы пытаетесь использовать для создания исполняемого файла. Если вы не знакомы с ними, в make-файлах перечислены зависимости между файлами. Для действительно простого случая это может быть что-то вроде:

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.o зависит от myprogram.cpp и от того, как создать myprogram.o из myprogram.cpp` соответственно.

Я предполагаю, что в вашем случае у вас есть make-файл, подобный приведенному выше, который был создан для gcc. Проблема, с которой вы столкнулись, заключается в том, что вы используете его с MS VC вместо gcc. Как это часто бывает, MS VC использует расширение «.obj» для своих объектных файлов вместо «.o».

Это означает, что когда make (или ее эквивалент, встроенный в IDE в вашем случае) пытается собрать программу, она просматривает эти строки, пытаясь выяснить, как собрать myprogram.exe . Для этого он видит, что ему нужно построить myprogram.o , поэтому он ищет правило, которое сообщает ему, как построить myprogram.o . Это говорит о том, что он должен скомпилировать файл .cpp, поэтому он это делает.

Затем все ломается - компилятор VC ++ создает myprogram.obj вместо myprogram.o как объектный файл, поэтому, когда он пытается перейти к следующему шагу для создания myprogram.exe из myprogram.o , он обнаруживает, что его попытка создать myprogram.o просто не удалось. Он выполнил то, о чем говорилось в правиле, но не произвел myprogram.o , как было обещано. Он не знает, что делать, поэтому закрывается и выдает сообщение об ошибке.

Решение этой конкретной проблемы, вероятно, довольно просто: отредактируйте файл make так, чтобы все объектные файлы имели расширение .obj вместо .o ]. Есть место для многих вопросов, все ли это исправит - это может быть все, что вам нужно, или это может просто привести к другим (возможно, более сложным) проблемам.

39
ответ дан 24 November 2019 в 19:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: